ltp是哈工大出品的自然语言处理工具箱, pyltp是python下对ltp(c++)的封装.
在linux下我们很容易的安装pyltp, 因为各种编译工具比较方便. 但是在windows下需要安装vs并且还得做一些配置, 因为我服务的人都是在windows下办公, 需要让他们能够在windows下使用ltp, 所以才有了这篇笔记. 我的方案有两个:
- 在win10 的bash下安装ltp, 然后启动ltp的server, 通过http协议来实现在windows下python调用ltp的方法.
- 安装编译好的wheel(目前只有python3.6/3.5 amd64)(我推荐这种方案)
- 我在文章最下面还引用了一种方法, 就是使用官方已经编译好的可执行exe文件, 直接在命令行(如cmd)下调用.
第一种方案: bash下安装
基本环境
- windows 10
- bash for windows
- python 3.6
安装bash on ubuntu on windows
这个大家自行百度, 安装很简单.
安装编译环境
sudo apt install cmake sudo apt install g++
安装过程大概十几分钟.
下载ltp源码
- 下载源码, 这是github地址.
- 解压到你能记住的位置
编译
cd到源码目录, 比如我的目录:
cd /mnt/d/bash-sites/ltp-3.4.0
运行编译命令:
./configure make
编译过程大概花费十几分钟. 现在我的目录里多了一个bin文件夹:
drwxrwxrwx 0 root root 512 Jan 31 15:42 ./ drwxrwxrwx 0 root root 512 Jan 31 15:30 ../ -rwxrwxrwx 1 root root 800 Jan 31 15:30 appveyor.yml* -rwxrwxrwx 1 root root 0 Jan 31 15:30 AUTHORS* drwxrwxrwx 0 root root 512 Jan 31 15:53 bin/ drwxrwxrwx 0 root root 512 Jan 31 15:42 build/ -rwxrwxrwx 1 root root 29301 Jan 31 15:30 ChangeLog.md* drwxrwxrwx 0 root root 512 Jan 31 15:30 cmake/ -rwxrwxrwx 1 root root 1439 Jan 31 15:30 CMakeLists.txt* drwxrwxrwx 0 root root 512 Jan 31 15:30 conf/ -rwxrwxrwx 1 root root 131 Jan 31 15:30 configure* -rwxrwxrwx 1 root root 902 Jan 31 15:30 COPYING* drwxrwxrwx 0 root root 512 Jan 31 15:30 doc/ -rwxrwxrwx 1 root root 79976 Jan 31 15:30 Doxyfile* drwxrwxrwx 0 root root 512 Jan 31 15:30 examples/ -rwxrwxrwx 1 root root 1028 Jan 31 15:30 .gitignore* drwxrwxrwx 0 root root 512 Jan 31 15:42 include/ -rwxrwxrwx 1 root root 85 Jan 31 15:30 INSTALL* drwxrwxrwx 0 root root 512 Jan 31 15:53 lib/ -rwxrwxrwx 1 root root 965 Jan 31 15:30 Makefile* -rwxrwxrwx 1 root root 6639 Jan 31 15:30 NEWS.md* -rwxrwxrwx 1 root root 4750 Jan 31 15:30 README.md* drwxrwxrwx 0 root root 512 Jan 31 15:30 src/ -rwxrwxrwx 1 root root 3048 Jan 31 15:30 subproject.d.json* drwxrwxrwx 0 root root 512 Jan 31 15:31 thirdparty/ drwxrwxrwx 0 root root 512 Jan 31 15:31 tools/ -rwxrwxrwx 1 root root 1372 Jan 31 15:30 .travis.yml*
配置server
一开始我启动server遇到了这个错误.
[INFO] 2018-01-31 15:54:39 Loading segmentor model from "ltp_data/cws.model" ...
[ERROR] 2018-01-31 15:54:39 /mnt/d/bash-sites/ltp-3.4.0/src/ltp/LTPResource.cpp: line 50: LoadSegmentorResource(): Failed to load segmentor model
[ERROR] 2018-01-31 15:54:39 /mnt/d/bash-sites/ltp-3.4.0/src/ltp/Ltp.cpp: line 78: load(): in LTP::wordseg, failed to load segmentor resource
[ERROR] 2018-01-31 15:54:39 /mnt/d/bash-sites/ltp-3.4.0/src/server/ltp_server.cpp: line 172: main(): Failed to setup LTP engine.
因为缺少了模型文件, 在这里下载最新的模型文件.
解压到/mnt/d/bash-sites/ltp-3.4.0/ltp_data/
下, 这是ltp默认的数据模型存放位置.
然后就能顺利启动服务器啦.
syd@DESKTOP-J02R2VJ:/mnt/d/bash-sites/ltp-3.4.0$ ./bin/ltp_server --port 9090
[INFO] 2018-01-31 15:56:36 Loading segmentor model from "ltp_data/cws.model" ...
[INFO] 2018-01-31 15:56:36 segmentor model is loaded.
[INFO] 2018-01-31 15:56:36 Loading postagger model from "ltp_data/pos.model" ...
[INFO] 2018-01-31 15:56:36 postagger model is loaded
[INFO] 2018-01-31 15:56:36 Loading NER resource from "ltp_data/ner.model"
[INFO] 2018-01-31 15:56:36 NER resource is loaded.
[INFO] 2018-01-31 15:56:36 Loading parser resource from "ltp_data/parser.model"
[INFO] 2018-01-31 15:56:37 parser is loaded.
[INFO] 2018-01-31 15:56:37 Loading srl resource from "ltp_data/pisrl.model"
[dynet] random seed: 493907432
[dynet] allocating memory: 2000MB
[dynet] memory allocation done.
[INFO] 2018-01-31 15:56:39 srl resource is loaded.
[INFO] 2018-01-31 15:56:39 Resources loading finished.
[INFO] 2018-01-31 15:56:39 Start listening on port [9090]...
测试
随便写个请求, 看看效果:
import requests import json uri_base = "http://127.0.0.1:9090/ltp" data = {'s': '我认为他叫汤姆去拿外衣和鞋子。', 'x': 'n', 't': 'srl'} response = requests.get(uri_base, data=data) rdata = response.json() print(json.dumps(rdata, indent=4, ensure_ascii=False)) [ [ [ { "arg": [], "cont": "我", "id": 0, "ne": "O", "parent": 1, "pos": "r", "relate": "SBV" }, { "arg": [ { "beg": 0, "end": 0, "id": 0, "type": "A0" }, { "beg": 2, "end": 9, "id": 1, "type": "A1" } ], "cont": "认为", "id": 1, "ne": "O", "parent": -1, "pos": "v", "relate": "HED" }, { "arg": [], "cont": "他", "id": 2, "ne": "O", "parent": 3, "pos": "r", "relate": "SBV" }, { "arg": [ { "beg": 2, "end": 2, "id": 0, "type": "A0" }, { "beg": 4, "end": 4, "id": 1, "type": "A1" }, { "beg": 5, "end": 9, "id": 2, "type": "A2" } ], "cont": "叫", "id": 3, "ne": "O", "parent": 1, "pos": "v", "relate": "VOB" }, { "arg": [], "cont": "汤姆", "id": 4, "ne": "S-Nh", "parent": 3, "pos": "nh", "relate": "DBL" }, { "arg": [], "cont": "去", "id": 5, "ne": "O", "parent": 6, "pos": "v", "relate": "ADV" }, { "arg": [ { "beg": 7, "end": 9, "id": 0, "type": "A1" } ], "cont": "拿", "id": 6, "ne": "O", "parent": 3, "pos": "v", "relate": "VOB" }, { "arg": [], "cont": "外衣", "id": 7, "ne": "O", "parent": 6, "pos": "n", "relate": "VOB" }, { "arg": [], "cont": "和", "id": 8, "ne": "O", "parent": 9, "pos": "c", "relate": "LAD" }, { "arg": [], "cont": "鞋子", "id": 9, "ne": "O", "parent": 7, "pos": "n", "relate": "COO" }, { "arg": [], "cont": "。", "id": 10, "ne": "O", "parent": 1, "pos": "wp", "relate": "WP" } ] ] ]
第二种方案: 安装wheel
下载wheels
下面两个文件针对不同的python版本下载一个即可, 这是我在自己的电脑(win10)上编译的,不知道你的系统是否能用,64bit的windows应该都可以,有问题在下面留言。
- pyltp-0.2.1-cp35-cp35m-win_amd64.whl
- pyltp-0.2.1-cp36-cp36m-win_amd64.whl
注意: 这两个文件的区别是python版本号
安装文件
下载好了以后, 在命令行下, cd到wheel文件所在的目录, 然后使用命令pip install wheel文件名安装.
测试
安装好了以后, 打开python shell, 试用一下.
from pyltp import SentenceSplitter sents = SentenceSplitter.split('元芳你怎么看?我就趴窗口上看呗!') # 分句 print('\n'.join(sents))
下载models数据
- 下载models链接:https://pan.baidu.com/s/1o9vytmU 密码:5ntf
- 放到任意方便调用的地方即可, 因为程序里需要你自己主动调用的
第三种方案: 直接调用编译好的ltp的可执行文件
可以参考这篇文章, 但是我在3.4版本中测试不成功, 加载srl资源失败. 但是在3.3.1版本上测试是成功的.
总结
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 【雨果唱片】中国管弦乐《鹿回头》WAV
- APM亚流新世代《一起冒险》[FLAC/分轨][106.77MB]
- 崔健《飞狗》律冻文化[WAV+CUE][1.1G]
- 罗志祥《舞状元 (Explicit)》[320K/MP3][66.77MB]
- 尤雅.1997-幽雅精粹2CD【南方】【WAV+CUE】
- 张惠妹.2007-STAR(引进版)【EMI百代】【WAV+CUE】
- 群星.2008-LOVE情歌集VOL.8【正东】【WAV+CUE】
- 罗志祥《舞状元 (Explicit)》[FLAC/分轨][360.76MB]
- Tank《我不伟大,至少我能改变我。》[320K/MP3][160.41MB]
- Tank《我不伟大,至少我能改变我。》[FLAC/分轨][236.89MB]
- CD圣经推荐-夏韶声《谙2》SACD-ISO
- 钟镇涛-《百分百钟镇涛》首批限量版SACD-ISO
- 群星《继续微笑致敬许冠杰》[低速原抓WAV+CUE]
- 潘秀琼.2003-国语难忘金曲珍藏集【皇星全音】【WAV+CUE】
- 林东松.1997-2039玫瑰事件【宝丽金】【WAV+CUE】