赞
踩
2021SC@SDUSC
目录
1,使用add_word(word,freq = None,tag = None)方法可以在程序中给词典动态添加词汇
2,使用suggest_freq(segment,tune=True)可以调节单个词汇的词频,使它可以/不可以被识别出来。
使用jieba.load_userdict(file)方法,加载自定义的词典,file为词典的路径
范例:
- import sys
- sys.path.append("../")
- import jieba
- jieba.load_userdict("userdict.txt")
- test_sent = (
- "李小福是创新办主任也是云计算方面的专家; 什么是八一双鹿\n"
- "例如我输入一个带“韩玉赏鉴”的标题,在自定义词库中也增加了此词为N类\n"
- "「台中」正確應該不會被切開。mac上可分出「石墨烯」;此時又可以分出來凱特琳了。"
- )
- words = jieba.cut(test_sent)
- print('/'.join(words))
为了方便阅读,我们分批次加入待加入的词(初识userdict.txt为空):
结果:
1,未加入词
可以看到,即使未添加自定义词典,李小福等词也被正确的划分开来,但是有些我们希望它们被划分在一起,比如云计算、创新办、八一双鹿、韩玉赏鉴等等。
2,加入云计算,创新办,八一双鹿,韩玉赏鉴、凱特琳
添加样例:
运行结果:
可以看到,所有添加的词已经不会被切分。添加词的格式为 word frequency flag,其中后两项均可省略(看到第一行和最后一行)
3,添加“台中”
运行结果:
台中仍未被分开,那么考虑到词频的问题,选择将词频提高,经测试,提高到70时,“台中”可以被正确合并。结果:
- import sys
- sys.path.append("../")
- import jieba
- # jieba.load_userdict("userdict.txt")
-
- jieba.add_word('石墨烯')
- jieba.add_word('凱特琳')
- jieba.del_word('自定义词')
- test_sent = (
- "李小福是创新办主任也是云计算方面的专家; 什么是八一双鹿\n"
- "例如我输入一个带“韩玉赏鉴”的标题,在自定义词库中也增加了此词为N类\n"
- "「台中」正確應該不會被切開。mac上可分出「石墨烯」;此時又可以分出來凱特琳了。"
- )
- words = jieba.cut(test_sent)
- print('/'.join(words))
结果:
- import sys
- sys.path.append("../")
- import jieba
- jieba.suggest_freq('台中',tune=True)#使得“台中”可以被识别
- jieba.suggest_freq(('增','加'),tune=True)#使得“增加”不可被识别,分成增/加
- test_sent = (
- "李小福是创新办主任也是云计算方面的专家; 什么是八一双鹿\n"
- "例如我输入一个带“韩玉赏鉴”的标题,在自定义词库中也增加了此词为N类\n"
- "「台中」正確應該不會被切開。mac上可分出「石墨烯」;此時又可以分出來凱特琳了。"
- )
- words = jieba.cut(test_sent)
- print('/'.join(words))
结果:
tune为True,调整该词词频为可识别的词频;tune为False,不调整
看到add_word()源码:
- def add_word(self, word, freq=None, tag=None):
- """
- Add a word to dictionary.
- freq and tag can be omitted, freq defaults to be a calculated value
- that ensures the word can be cut out.
- """
- self.check_initialized()
- word = strdecode(word)
- freq = int(freq) if freq is not None else self.suggest_freq(word, False)
- self.FREQ[word] = freq
- self.total += freq
- if tag:
- self.user_word_tag_tab[word] = tag
- for ch in xrange(len(word)):
- wfrag = word[:ch + 1]
- if wfrag not in self.FREQ:
- self.FREQ[wfrag] = 0
- if freq == 0:
- finalseg.add_force_split(word)
可以看到,如果freq为None,那么它将调用 suggest_freq(word,False)函数,获得该词可以被识别的词频。然后用该词频作为word的词频,添加word到词频FREQ字典。
如果tag为None,则不会添加word的词性。
也就是说,如果希望添加词并且使得它可以被识别,自定义词典中完全可以省略该词的词频。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。