jieba 分词
其实 NLP 的第一个基础工具是正则表达式,熟悉规则就行,当然熟练是需要练习的。
1. jieba 三种分词模式
import jieba
seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print("Full Mode: " + "/ ".join(seg_list)) # 全模式
seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list)) # 精确模式
seg_list = jieba.cut("他来到了网易杭研大厦") # 默认是精确模式
print(", ".join(seg_list))
seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造") # 搜索引擎模式
print(", ".join(seg_list))
2. 词性标注
import jieba.posseg as pseg
words = pseg.cut('结巴分词是使用广泛的分词工具,具有以下的优点')
time.sleep(2)
for word, flag in words:
print('%s %s' %(word, flag))
3.加载自定义字典准确分词,动态调整词频和字典
加载自定义字典
example: 一个医疗相关的文档
用来分词,可能会分的不准确
import jieba
if __name__ == "__main__":
with open('new1.txt', 'r', encoding='utf-8') as f:
for line in f.readlines():
word = jieba.cut(line)
while True:
try:
print(next(word))
except:
break
从结果看,第一个词‘奥沙利铂’是一种药名,被分开了,类似的还有‘二氨环己烷’。
那即导入自定义的字典,只要在txt文件中添加这些词就可以
加入一句代码
jieba.load_userdict('1.txt')
从运行结果可知这些词就被分出来了
用正则表达式
例如文本有这样一句话
分词出来可能是这样的
为了使这个II期,III期被分好,可以用正则表达式匹配
regu = u'(?:[^\u4e00-\u9fa5()*&...%$.,。!]){1,5}期'
match = re.compile(regu)
with open('new1.txt', 'r', encoding='utf-8') as f:
for line in f.readlines():
res_find = match.findall(line)
if res_find:
line = match.sub('FLAG1', line)
word = jieba.cut(line)
res = ''
index = 0
for item in word:
if item == 'FLAG1':
item = res_find[index]
index += 1
res += ' ' + item
print(res)
结果就被分出来了
4. 命名实体识别(人名、地名、机构名…)
NER(Named Entity Recognition)
…