提到分词,那么最常用的库就是jieba了。
文本分析中一个重要的准备工作就是分词。所谓分词就是把一个句子切分成一个个词组。例如:
import jieba
str1 = '2024年,公司决定启动IPO'
print(jieba.lcut(str1))
输出:
['2024', '年', ',', '公司', '决定', '启动', 'IPO']
在分词之前,我们可以进行一些准备工作,使得分词之后的结果更符合我们的预期。
首先,加载对应领域的词库。公司类研究可以用一些财经词库,词库在输入法的网站会有得下载,使用下面的语句可以加载对应的词库:
jieba.load_userdict('财经词库.txt')
这会加载路径下的词库文件,加载后,一些本来会被分开的词语就会被更好的区分为一个整体,例如:
import jieba
str1 = '委托候选人名单'
print(jieba.lcut(str1))
jieba.load_userdict('财经词库.txt')
print('加载词库后')
print(jieba.lcut(str1))
输出结果:
可以看到,加载词库后,这个委托候选人名单并没有被分开。jieba库也提供了一些微调的方案。如:
- 使用 add_word(word, freq=None, tag=None) 和 del_word(word) 可在程序中动态修改词典。
- 使用 suggest_freq(segment, tune=True) 可调节单个词语的词频,使其能(或不能)被分出来。
其次,使用停用词,筛选掉一些没有意义的词汇。
停用词库网上有许多,通常是一些无意义的词语,如语气词等等,例如这是在网上找到的停用词表:
通常,单个字符通常含有的含义也非常有限,我们也会将他去除。所以,我们可以采取这样的方式:
import jieba
stop_word = []
with open('stop_word.txt', 'r', encoding='utf-8')as f:
for i in f.readlines():
stop_word.append(i.replace('\n', '').strip())
# 加载停用词
def m_cut(intxt):
return [w for w in jieba.cut(intxt)
if w not in stop_word and len(w) > 1]
#筛选掉在停用词中的,且长度为1的词语。
我们就可以使用编写好的m_cut进行分词了。
至此,准备工作基本上准备就绪,可以开展分词工作了。