您现在的位置: 爱51代码网 >> 范文 >> 文章正文
NLP中文信息处理---正向最大匹配法分词
wordl=segmentation(strList,maxLen,sentence) 
63.    #打印分词结果  
64.    for eachChar in wordl: 
65.        print(eachChar,end = "/ ") 
66.    print("")#换行  
67.    print("****************解析完毕!*********************") 
68. 
69.#运行  
70.if __name__ == '__main__': 
71.    main() 
# -*- coding: cp936 -*-
#最大匹配法进行分词, 测试文件为MaxWordSegmentationTest.py
#author 徐能
#date 2013/3/25
import string
import re

#读入词表文件到内存list
#输入:词典文件名, 输出:词典中所有词的list表,其中最大词长
def load_dict(filename):
 f = open(filename,'r').read()
 maxLen = 1
 strList=f.split("\n")

 #寻找最大词长
 for i in strList:
  if len(i)>maxLen:
   maxLen=len(i)

 return strList,maxLen;

#分词方法.
#输入:词表中所有词的列表与其中的最大词长, 输出:分词后的列表
def segmentation(strList,maxLen,sentence):
 wordList=[]  #用于输出的词列表

 while(len(sentence)>0):
  word=sentence[0:maxLen] #每次取最大词长的词

  meet=False;   #标记位, 判断是否找到该词

  while((not meet) and (len(word)>0)):
   #如果词在词表中
   if(word in strList):
    wordList.append(word)   #添加到输出列表
    sentence=sentence[len(word):len(sentence)]#后移
    meet=True;
   #词不在词表中时
   else:
    #当词长为1时, 添加到输出表, 并后移总词位
    if(len(word)==1):
     wordList.append(word)
     sentence=sentence[len(word):len(sentence)]
     meet=True;
    else:
    #当词长不为1时, 词长减1(最后一位)
     word=word[0:len(word)-1]
 return wordList

#主函数
def main():
 strList,maxLen=load_dict('dict.txt')
 print("词表中最大词长度为:",maxLen)
    #输入句子
 sentence = input('请输入中文句子:')
 print('输入的句子为:',sentence)
# sentence='迈向充满希望的新世纪'
 print('输入的句子为:',sentence)
 length=len(sentence)
 print('输入的句子长度:',length)
 print("****************开始解析**********************")
 wordl=segmentation(strList,maxLen,sentence)
 #打印分词结果
 for eachChar in wordl:
  print(eachChar,end = "/ ")
 print("")#换行
 print("****************解析完毕!*********************")

#运行
if __name__ == '__main__':
 main()五、运行结果

六、总结

关于效率:

正向最大匹配法分词占用很大计算量,结果本人测试,100多个字的一段话一般2秒分完。1000个字的一段话,需要20几秒才能分完。以最大词长为20来计算的话,待分的句子为20个字,假设全部分成2字词,词表中有5万个词,则计算量约为22*5*50000=550万。如此可见,当待分词句子很长,最大词长很大时,计算量是惊人的。

关于分词准确度:

正向最大匹配法的缺陷在与精确度不能达到理想的状态。同时也不能解决词的歧义问题

上一页  [1] [2] [3] [4] [5] [6] 下一页

  • 上一篇文章:

  • 下一篇文章: 没有了
  • 最新文章 热点文章 相关文章
    sharepoint 2010 获取用户信息Us
    设计包含max函数的队列
    随机从数组中取出指定的不重复的
    mysql主从同步延迟方案解决的学习
    青岛科学六年级下册教材分析
    生日旅行总结
    中小板生日快乐随感
    送生日快乐桑葚乳酪小蛋糕
    写给女儿的生日快乐
    总分公司财务核算
    mysql主从同步延迟方案解决的学习
    生日旅行总结
    中小板生日快乐随感
    送生日快乐桑葚乳酪小蛋糕
    写给女儿的生日快乐
    总分公司财务核算
    恢复使用繁体字可行性研究报告
    保险受益人制度相关问题的探讨
    初中生地理读图能力培养的研究
    搞笑生日祝福
    中国工作流厂商形成战略联盟
    TIME_WAIT状态下对接收到的数
    The layout of PID & PORT i
    hadoop核心逻辑shuffle代码分
    The layout of PID & PORT i
    The layout of PID & PORT i
    The layout of PID & PORT i
    MapReduce错误任务失败处理 
    Oracle恢复内部原理(介质恢
    在 Oracle 中如何确定远程 s
     



    设为首页 | 加入收藏 | 网站地图 | 友情链接 |