Press "Enter" to skip to content

北大开源分词工具pkuseg

pkuseg简介

 

pkuseg是由北京大学语言计算与机器学习研究组研制推出的一套全新的中文分词工具包。pkuseg具有如下几个特点:

多领域分词。不同于以往的通用中文分词工具,此工具包同时致力于为不同领域的数据提供个性化的预训练模型。根据待分词文本的领域特点,用户可以自由地选择不同的模型。 我们目前支持了新闻领域,网络领域,医药领域,旅游领域,以及混合领域的分词预训练模型。在使用中,如果用户明确待分词的领域,可加载对应的模型进行分词。如果用户无法确定具体领域,推荐使用在混合领域上训练的通用模型。各领域分词样例可参考txt。
更高的分词准确率。相比于其他的分词工具包,当使用相同的训练数据和测试数据,pkuseg可以取得更高的分词准确率。
支持用户自训练模型。支持用户使用全新的标注数据进行训练。
支持词性标注。

相关测试结果:

MSRAPrecisionRecallF-score
jieba87.0189.8888.42
THULAC95.6095.9195.71
pkuseg96.9496.8196.88

 

WEIBOPrecisionRecallF-score
jieba87.7987.5487.66
THULAC93.4092.4092.87
pkuseg93.7894.6594.21

 

DefaultMSRACTB8PKUWEIBOAll Average
jieba81.4579.5881.8383.5681.61
THULAC85.5587.8492.2986.6588.08
pkuseg87.2991.7792.6893.4391.29

 

pkuseg的使用

 

1、使用默认配置进行配置

 

import pkuseg
 
seg = pkuseg.pkuseg()           # 以默认配置加载模型
text = seg.cut('我爱北京天安门')  # 进行分词
print(text)

 

2、使用细分领域分词(如果用户明确分词领域,推荐使用细领域模型分词)

 

import pkuseg
 
seg = pkuseg.pkuseg(model_name='medicine')  # 程序会自动下载所对应的细领域模型
text = seg.cut('我爱北京天安门')              # 进行分词
print(text)

 

3、分词同时进行词性标注,各词性标签的详细含义可参考 tags.txt

 

import pkuseg
 
seg = pkuseg.pkuseg(postag=True)  # 开启词性标注功能
text = seg.cut('我爱北京天安门')    # 进行分词和词性标注
print(text)

 

4、对文件分词

 

import pkuseg
 
# 对input.txt的文件分词输出到output.txt中
# 开8个进程
pkuseg.test('input.txt', 'output.txt', nthread=8)

 

5、额外使用用户自定义词典

 

import pkuseg
 
seg = pkuseg.pkuseg(user_dict='my_dict.txt')  # 给定用户词典为当前目录下的"my_dict.txt"
text = seg.cut('我爱北京天安门') 
print(text)

 

模型配置:

 

pkuseg.pkuseg(model_name = "default", user_dict = "default", postag = False)
model_name模型路径。
    "default",默认参数,表示使用我们预训练好的混合领域模型(仅对pip下载的用户)。
"news", 使用新闻领域模型。
"web", 使用网络领域模型。
"medicine", 使用医药领域模型。
"tourism", 使用旅游领域模型。
    model_path, 从用户指定路径加载模型。
user_dict设置用户词典。
"default", 默认参数,使用我们提供的词典。
None, 不使用词典。
dict_path, 在使用默认词典的同时会额外使用用户自定义词典,可以填自己的用户词典的路径,词典格式为一行一个词。
postag是否进行词性分析。
False, 默认参数,只进行分词,不进行词性标注。
True, 会在分词的同时进行词性标注。

 

对文件进行分词:

 

pkuseg.test(readFile, outputFile, model_name = "default", user_dict = "default", postag = False, nthread = 10)
readFile输入文件路径。
outputFile输出文件路径。
model_name模型路径。同pkuseg.pkuseg
user_dict设置用户词典。同pkuseg.pkuseg
postag设置是否开启词性分析功能。同pkuseg.pkuseg
nthread测试时开的进程数。

 

模型训练:

 

pkuseg.train(trainFile, testFile, savedir, train_iter = 20, init_model = None)
trainFile训练文件路径。
testFile测试文件路径。
savedir训练模型的保存路径。
train_iter训练轮数。
init_model初始化模型,默认为None表示使用默认初始化,用户可以填自己想要初始化的模型的路径如init_model='./models/'。

 

pkuseg 实战

 

使用pkuseg 分词+使用wordcloud显示词云:

 

import pkuseg
from collections import Counter
import pprint
from wordcloud import WordCloud
import matplotlib.pyplot as plt
 
with open("data/santisanbuqu_liucixin.txt", encoding="utf-8") as f:
    content = f.read()
 
with open("data/CNENstopwords.txt", encoding="utf-8") as f:
    stopwords = f.read()
 
lexicon = ['章北海', '汪淼', '叶文洁']
seg = pkuseg.pkuseg(user_dict=lexicon)
text = seg.cut(content)
 
new_text = []
for w in text:
    if w not in stopwords:
        new_text.append(w)
counter = Counter(new_text)
pprint.pprint(counter.most_common(50))
 
cut_text = " ".join(new_text)
 
wordcloud = WordCloud(font_path="font/FZYingXueJW.TTF", background_color="white", width=800, height=600).generate(
    cut_text)
 
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.show()

 

 

参考链接: https://github.com/lancopku/pkuseg-python

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注