当前位置:   article > 正文

Python 最大逆向匹配算法_python逆向最大匹配处理批量文件

python逆向最大匹配处理批量文件

第三次重新写这个算法,每次写都有新的体会。

这次最大的感受是把访问文件夹的包都熟悉了一下,os和shutil。后者用来删除整个文件,这种破坏力还是慎用吧。

  1. def mk_new_dir(filename): # 新建一个文件夹,如果存在,则删除并重建。
  2. if os.path.exists(filename) is True:
  3. shutil.rmtree(filename)
  4. os.mkdir(filename)
'
运行

下面是最大逆向匹配核心部分:

  1. def rmm(dicwords, lines, n, filepath):
  2. """最大逆向匹配:
  3. 最大逆向匹配算法,需要分词词典[];待分割文本[];设定分割长度int
  4. """
  5. global BUS #
  6. for line in lines:
  7. if line.strip().replace(' ', '').replace('\n', '') != '':
  8. BUS = [] # 释放
  9. line = line.strip().replace('\n', '').replace(' ', '') # 清洗
  10. # print(line)
  11. line_len = len(line) # 句长
  12. if line_len < n:
  13. n = line_len # 如果句长短语规定切分长度,则设置规定切分长度为句长
  14. # print(str(n))
  15. start = n
  16. s = line[-start:] # 获取待分割语句
  17. t = rmm_cut(s, dicwords) # 获取已切分词长,用来加工下一次取词
  18. end = t
  19. while end < line_len: # 核心部分,实现对句子的循环取词
  20. start = start + t
  21. s = line[-start:-end]
  22. # print(s)
  23. t = rmm_cut(s, dicwords) # 已切分词长
  24. end = end + t
  25. filewrite(BUS, filepath) # 写入结果文件
  26. def rmm_cut(s, dicwords):
  27. """逆向匹配,分函数"""
  28. flag = True
  29. global BUS
  30. # print(s)
  31. while flag is True: # 循环切分
  32. if s in dicwords:
  33. s = '/' + s
  34. BUS.append(s)
  35. flag = False
  36. return len(s) - 1 # 对返回的数进行-1处理,保证下一次的取词正确
  37. elif len(s) == 1:
  38. s = '/' + s
  39. BUS.append(s)
  40. flag = False
  41. return 1
  42. else:
  43. s = s[1:]
'
运行

    rmm(词典列表,读入的文本,每次取句子最大长度,存储文本路径)

    rmm_cut(取得的长句,词典列表)

不论正向还是逆向匹配,都需要运用到Python的切片功能,把过程搞明白,就能很好的实现匹配功能。

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

闽ICP备14008679号