当前位置:   article > 正文

更多代码阅读及测试(词典操作)_user_dict.txt

user_dict.txt

2021SC@SDUSC


目录

1,加载词典

2,调整词典

        1,使用add_word(word,freq = None,tag = None)方法可以在程序中给词典动态添加词汇

              使用del_word(word)可以在程序中动态删除词汇

        2,使用suggest_freq(segment,tune=True)可以调节单个词汇的词频,使它可以/不可以被识别出来。


1,加载词典

        使用jieba.load_userdict(file)方法,加载自定义的词典,file为词典的路径

        范例:

       

  1. import sys
  2. sys.path.append("../")
  3. import jieba
  4. jieba.load_userdict("userdict.txt")
  5. test_sent = (
  6. "李小福是创新办主任也是云计算方面的专家; 什么是八一双鹿\n"
  7. "例如我输入一个带“韩玉赏鉴”的标题,在自定义词库中也增加了此词为N类\n"
  8. "「台中」正確應該不會被切開。mac上可分出「石墨烯」;此時又可以分出來凱特琳了。"
  9. )
  10. words = jieba.cut(test_sent)
  11. print('/'.join(words))

为了方便阅读,我们分批次加入待加入的词(初识userdict.txt为空):

结果:

        1,未加入词

        

可以看到,即使未添加自定义词典,李小福等词也被正确的划分开来,但是有些我们希望它们被划分在一起,比如云计算、创新办、八一双鹿、韩玉赏鉴等等。

        2,加入云计算,创新办,八一双鹿,韩玉赏鉴、凱特琳

添加样例:

 运行结果:

        

 可以看到,所有添加的词已经不会被切分。添加词的格式为 word frequency flag,其中后两项均可省略(看到第一行和最后一行)

        3,添加“台中”

 运行结果:

        

 台中仍未被分开,那么考虑到词频的问题,选择将词频提高,经测试,提高到70时,“台中”可以被正确合并。结果:

2,调整词典

        1,使用add_word(word,freq = None,tag = None)方法可以在程序中给词典动态添加词汇

              使用del_word(word)可以在程序中动态删除词汇

                

  1. import sys
  2. sys.path.append("../")
  3. import jieba
  4. # jieba.load_userdict("userdict.txt")
  5. jieba.add_word('石墨烯')
  6. jieba.add_word('凱特琳')
  7. jieba.del_word('自定义词')
  8. test_sent = (
  9. "李小福是创新办主任也是云计算方面的专家; 什么是八一双鹿\n"
  10. "例如我输入一个带“韩玉赏鉴”的标题,在自定义词库中也增加了此词为N类\n"
  11. "「台中」正確應該不會被切開。mac上可分出「石墨烯」;此時又可以分出來凱特琳了。"
  12. )
  13. words = jieba.cut(test_sent)
  14. print('/'.join(words))

  结果:

        

        2,使用suggest_freq(segment,tune=True)可以调节单个词汇的词频,使它可以/不可以被识别出来。

  1. import sys
  2. sys.path.append("../")
  3. import jieba
  4. jieba.suggest_freq('台中',tune=True)#使得“台中”可以被识别
  5. jieba.suggest_freq(('增','加'),tune=True)#使得“增加”不可被识别,分成增/加
  6. test_sent = (
  7. "李小福是创新办主任也是云计算方面的专家; 什么是八一双鹿\n"
  8. "例如我输入一个带“韩玉赏鉴”的标题,在自定义词库中也增加了此词为N类\n"
  9. "「台中」正確應該不會被切開。mac上可分出「石墨烯」;此時又可以分出來凱特琳了。"
  10. )
  11. words = jieba.cut(test_sent)
  12. print('/'.join(words))

结果:

tune为True,调整该词词频为可识别的词频;tune为False,不调整

看到add_word()源码:

  1. def add_word(self, word, freq=None, tag=None):
  2. """
  3. Add a word to dictionary.
  4. freq and tag can be omitted, freq defaults to be a calculated value
  5. that ensures the word can be cut out.
  6. """
  7. self.check_initialized()
  8. word = strdecode(word)
  9. freq = int(freq) if freq is not None else self.suggest_freq(word, False)
  10. self.FREQ[word] = freq
  11. self.total += freq
  12. if tag:
  13. self.user_word_tag_tab[word] = tag
  14. for ch in xrange(len(word)):
  15. wfrag = word[:ch + 1]
  16. if wfrag not in self.FREQ:
  17. self.FREQ[wfrag] = 0
  18. if freq == 0:
  19. finalseg.add_force_split(word)

可以看到,如果freq为None,那么它将调用 suggest_freq(word,False)函数,获得该词可以被识别的词频。然后用该词频作为word的词频,添加word到词频FREQ字典。

如果tag为None,则不会添加word的词性。

也就是说,如果希望添加词并且使得它可以被识别,自定义词典中完全可以省略该词的词频。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/348463
推荐阅读
相关标签
  

闽ICP备14008679号