暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

用python实现前向分词最大匹配算法

做一个柔情的程序猿 2020-10-13
795


点击箭头处“蓝色字”,关注我们哦!!

分词是自然语言处理的一个基本工作,中文分词和英文不同,字词之间没有空格。中文分词是文本挖掘的基础,对于输入的一段中文,成功的进行中文分词,可以达到电脑自动识别语句含义的效果。中文分词技术属于自然语言处理技术范畴,对于一句话,人可以通过自己的知识来明白哪些是词,哪些不是词,但如何让计算机也能理解?其处理过程就是分词算法。

分词方法的种类

可以将中文分词方法简单归纳为: 

 

  1. 基于词表的分词方法

  2. 基于统计的分词方法

  3. 基于序列标记的分词方法

基于词表的分词方法最为简单,根据起始匹配位置不同可以分为:

  1. 前向最大匹配算法

  2. 后向最大匹配算法

  3. 双向最大匹配算法

三种方法思想都很简单,今天就用python实现前向最大匹配算法 

Word分词

word分词是一个Java实现的分布式的中文分词组件,提供了多种基于词典的分词算法,并利用ngram模型来消除歧义。能准确识别英文、数字,以及日期、时间等数量词,能识别人名、地名、组织机构名等未登录词。能通过自定义配置文件来改变组件行为,能自定义用户词库、自动检测词库变化、支持大规模分布式环境,能灵活指定多种分词算法,能使用refine功能灵活控制分词结果,还能使用词性标注、同义标注、反义标注、拼音标注等功能。同时还无缝和Lucene、Solr、ElasticSearch、Luke集成。

前向最大匹配算法

前向最大匹配算法 

顾名思义,就是从待分词句子的左边向右边搜索,寻找词的最大匹配。我们需要规定一个词的最大长度,每次扫描的时候寻找当前开始的这个长度的词来和字典中的词匹配,如果没有找到,就缩短长度继续寻找,直到找到字典中的词或者成为单字。 

具体代码实现:

获取分词函数:getSeg(text)

    def getSeg(text):
    # 句子为空
    if not text:
    return ''

    # 句子成为一个词
    if len(text) == 1:
    return text

    # 此处写了一个递归方法
    if text in word_dict:
    return text
    else:
    small = len(text) - 1
    text = text[0:small]
    return getSeg(text)

    主函数:main()

      def main():
      global test_str, word_dict
      test_str = test_str.strip()
      # 正向最大匹配分词测试 最大长度5
      max_len = max(len(word) for word in word_dict)
      result_str = [] # 保存分词结果
      result_len = 0
      print('input :', test_str)
      while test_str:
      tmp_str = test_str[0:max_len]
      seg_str = getSeg(tmp_str)
      seg_len = len(seg_str)
      result_len = result_len + seg_len

      if seg_str.strip():
      result_str.append(seg_str)
      test_str = test_str[seg_len:]

      print('output :', result_str)

      字典:

        word_dict = ['混沌''Logistic''算法''图片''加密''利用''还原''Lena''验证''Baboon''效果']

        测试句子:

          test_str = '''一种基于混沌Logistic加密算法的图片加密与还原的方法,并利用Lena图和Baboon图来验证这种加密算法的加密效果。'''

          分词结果:


          —END—

          扫码关注我

          一起感悟科学魅力

          点分享

          点点赞

          点在看

          文章转载自做一个柔情的程序猿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论