命名实体识别(NER)被越来越多地应用到实际任务中。经典的模型非biLSTM+CRF莫属。如果再套用当今最火爆的预训练模型bert,只用bert+crf就能做出比biLSTM+CRF准确率更高的模型。但是训练模型往往是需要耗费资源,并且需要大量的训练语料。现今开源的NLP工具包层出不穷,我们可以直接站在巨人的肩膀上,简化我们的工作量,去完成我们的任务。
今天我们就为大家介绍一款超实用、超简单的中文NLP工具包——foolnltk
foolnltk
foolnltk的作者在介绍它的模型时,第一句话就是:“可能不是最快的开源中文分词,但很可能是最准的开源中文分词”。该模型是基于BiLSTM模型训练而成,包含分词,词性标注,实体识别, 且都有比较高的准确率。此外,和jieba类似的,用户可以自定义词典。最重要的一点是,模型开放了一个可以自己训练的接口,让用户去训练适应特定场景的模型。
install
很简单,pip install foolnltk
分词
import fool
text = "这是一个分词任务"print(fool.cut(text))
>>> ['这是', '一个', '分词', '任务']
用户可以自定义词典。词典格式如下,词的权重越高,词的长度越长,那么就越可能将其作为一个完整的词切分。权重值要大于1。
这不巧了嘛 2000
呵呵哒 1000
恩儿屁 1000
中文名 1000
加载词典
import fool
fool.load_userdict(path)
text = ["NLP的中文名叫恩儿屁", "这不巧了嘛呵呵哒"]
print(fool.cut(text))
>>> [['NLP', '的', '中文名', '叫', '恩儿屁'], ['这不巧了嘛', '呵呵哒']]
词性标注
import fool
text = ["一个傻子在北京"]
print(fool.pos_cut(text))
>>> [[('一个', 'm'), ('傻子', 'n'), ('在', 'p'), ('北京', 'ns')]]
实体识别
import fool
text = ["一个傻子在北京","你好啊"]
words, ners = fool.analysis(text)
print(ners)
>>> [[(5, 8, 'location', '北京')]]
是不是很灵活,很实用?foolnltk也支持java,传送门。除了foolnltk,还有许多其它开源的中文NLP工具包,包括bosonnlp、snownlp等等,大家有兴趣可以多试试!
扫码下图关注我们不会让你失望!