1.结巴分词:记得先安装jieba库
import jieba
jieba.load_userdict("userdict.txt")
sent = '在包含问题的所有解的解空间树中,按照深度优先搜索的策略,从根节点出发深度探索解空间树。'
# 全模式
wordlist = jieba.cut(sent, cut_all=True)
print('|'.join(wordlist))
# 精确细分
wordlist = jieba.cut(sent) # cut_all=False
print('|'.join(wordlist))
# 搜索引擎模式
wordlist = jieba.cut_for_search(sent)
print('|'.join(wordlist))
运行结果:
2.ltp中文分词:
from pyltp import Segmentor
model_path = "E:\\ltp_data_v3.4.0\\cws.model"
segmentor = Segmentor()
segmentor.load(model_path)
words = segmentor.segment("在包含问题的所有解的解空间树中,按照深度优先搜索的策略,从根节点出发深度探索解空间树。")
print("|".join(words))
分词后可以自定义字典进行简单处理:
from pyltp import Segmentor
# 分词后处理
postdict = {"解|空间": "解空间", "深度|优先": "深度优先"}
model_path = "E:\\ltp_data_v3.4.0\\cws.model"
segmentor = Segmentor()
segmentor.load(model_path)
words = segmentor.segment("在包含问题的所有解的解空间树中,按照深度优先搜索的策略,从根节点出发深度探索解空间树。")
seg_sent = "|".join(words)
for key in postdict:
seg_sent = seg_sent.replace(key, postdict[key])
print(seg_sent)
当然也可以增加用户自定义词典(新建一个txt文件)进行处理:
此图示例参考郑捷的《NLP汉语自然语言处理原理与实践》
第一列是词,第二列到第n列是该词的候选词性,如果仅用于分词,该词的词性可以忽略。
from pyltp import Segmentor
# 加入用户词典
model_path = "E:\\ltp_data_v3.4.0\\cws.model"
user_dict = "fulluserdict.txt"
segmentor = Segmentor()
segmentor.load_with_lexicon(model_path, user_dict)
words = segmentor.segment("在包含问题的所有解的解空间树中,按照深度优先搜索的策略,从根节点出发深度探索解空间树。")
print("|".join(words))
其中fulluserdict.txt放在该项目路径中,注意为utf-8格式:
参考书籍:《NLP汉语自然语言处理原理与实践》郑捷著。