NLP分词之字定义字典分词以及动态调整字典词频

本篇针对于jieba分词和hanlp两个分词工具的自定义字典剖析。

自定义字典分词

对于一个文档,我们通过上面两个工具进行分词操作。但是如果碰到一些特殊的文本,并且需要对一些专业术语以及分词工具中不存在的词进行切分就需要人工标识一些词放到自定义字典中,以便于使得分词结果中目标单词以一个整体的形式存放。

jieba分词:

定义一个'.txt'形式的文本文档,将目标单词写入该字典中。通过如下语句加载:

jieba.load_userdict("dict.txt")

然后通过cut函数正常切分即可。

对于hanlp分词:

我们需要在hanlp的数据包的文件夹中,比如:\\Hanlp\data\dictionary\custom,在该目录下建立一个'.txt'形式的文本文档,里面存放目标单词,形式如下:

XXXX n 4279
目标单词 词性 词频

然后打开\\Hanlp\hanlp.properties,找到如下的路径:

将上面创建的自定义字典路径添加进去,然后再使用hanlp工具进行分词即可。

 

调整字典词频

因为工程中可能有几十万个词的,所以需要动态调整字典中的词频。

通过下面代码将自定义字典中的单词词频重新声明一下即可:

fp = open('dict.txt','r',encoding='utf8')
for line in fp:
    line = line.strip()
    jieba.suggest_freq(line,tune=True)

 

但是对于hanlp中如果我们需要使得句子中尽可能长的单词在一起,那么就需要把\\Hanlp\data\dictionary\custom路径下建立的自定义字典按单词长度进行重新排列:

import os

dict_file=open("E:\\StudyApp\\Hanlp"+os.sep+"data"+os.sep+"dictionary"+os.sep+"custom"+os.sep+"resume_nouns.txt",'r',encoding='utf8')
d = {}

[d.update({ line:len(line.split(" ")[0]) }) for line in dict_file]
f = sorted(d.items(), key = lambda x:x[1], reverse=True)

dict_file=open("E:\\StudyApp\\Hanlp"+os.sep+"data"+os.sep+"dictionary"+os.sep+"custom"+os.sep+"resume_nouns1.txt",'r',encoding='utf8')
[dict_file.write(item[0])  for item in f]
dict_file.close()

通过执行上面代码,将原来字典经过排序后生成一个以单词长度逆序排列的字典。将原来字典删掉然后更改新生成字典文件名就可以达到调整词频的目的。

 

有一个点需要注意:

经过jieba分词操作之后返回的是一个生成器类型的结果。而经过hanlp分词之后返回的是一个字符串类型的结果。

前者需要通过" ".join()进行合并才可以得到最终分词结果写入文件。而后者本身就是一个"str"类型,可以直接写入。

你可能感兴趣的:(NLP)