根据自己的语料,发现使用结巴分词的粒度更适合,并且在使用外部词典进行分词时,哈工大的分词模块对于外部词典中的词会有不识别的现象。
对于词性标注而言,经过调研,各种分词工具都专注于做分词,词性标注做的都不是太好,结合语料比较之后决定使用哈工大ltp的词性标注模块。
代码如下:
import jieba
from pyltp import Postagger
import os
MODELDIR = "ltp_data"
def fenci_ltp():
fin = open('input.txt', 'r') # 需要进行分词的文件,每行一句话
jieba.load_userdict('mydict.txt')
postagger = Postagger() # 初始化实例
postagger.load(os.path.join(MODELDIR, "pos.model")) # 加载模型
for eachLine in fin:
line = eachLine.strip()
words = jieba.cut(line) # jieba分词返回的是可迭代的generator,里面的词是unicode编码
words = [word.encode('utf-8') for word in words] # 将unicode编码的单词以utf-8编码
postags = postagger.postag(words) # 词性标注
words_postags = []
for word,postag in zip(words, postags):
words_postags.append(word + '/' + postag)
print ' '.join(words_postags)
postagger.release() # 释放模型
if __name__ == '__main__':
fenci_ltp()
说明:
1、运行以上代码需要安装 jieba 和 pyltp,pip install jieba,pip install pyltp;
2、需要下载pyltp的模型文件,链接如下,这里只用到了其中的词性标注模型 pos.model;
https://pan.baidu.com/share/link?shareid=1988562907&uk=2738088569#list/path=%2Fltp-models%2F3.4.0
3、结巴分词使用了外部词典 mydict.txt,格式:一个词占一行;每一行分三部分,一部分为词语,另一部分为词频(可省略),最后为词性(可省略),用空格隔开 ;
欢迎提问。