已迁移到我新博客,阅读体验更佳token:NLP之词形还原

完整代码实现放在我的github上:click me

一、任务描述

  • 形态还原算法:

    1. 输入一个单词
    2. 如果词典里有该词,输出该词及其属性,转4,否则,转3
    3. 如果有该词的还原规则,并且,词典里有还原后的词,则输出还原后的词及其属性,转4,否则,调用<未登录词模块>
    4. 如果输入中还有单词,转(1),否则,结束。

二、技术路线

  1. 加载dic_ec.txt词典,词典存储着英到汉的映射,对于输入的单词,如果dic_ec.txt词典中包含这个单词的映射则直接输出。下面给出dic_ec.txt内容的基本形式:
//gbk编码,以\t分隔
homokaryosis none. 同核性, 同核现象
homokaryotic adj. 同核体的
homokurtic none. 等峰态性
homolanthionine none. 高羊毛氨酸
  1. 考虑到有些单词本身就是原形,也是其它单词的形态变换,所以在设计时决定把所有可能的结果都输出。在完成词典映射后再检查该单词是否能通过变换规则转换得到。我们知道英文单词的形态变换存在有规律的和无规律的变换,首先看有规律的变换,动词的规律变换形式有下面4条规则:
规则1.  *ves --> *f/*fe
规则2. *ies --> *y
规则3. *es --> *
规则4. *s --> *

        名次的规律变换形式有下面9条规则:

//第三人称单数
规则5. *ies --> *y
规则6. *es --> *
规则7. *s --> *
//现在进行时
规则8. *??ing --> *?
规则9. *ying --> *ie
规则10. *ing --> */*e
//过去时、过去分词
规则11. *??ed --> *?
规则12. *ied --> *y
规则13. *ed --> */*e

        通过在程序中写入这些规则来对单词形态进行还原,而无规则的形态变换只能通过预先建立好的词库来完成词形形态映射。在程序中通过加载irregualr nouns.txt对名词进行还原,加载irregualr verbs.txt对动词进行还原。下面分别给出这两文件中的内容形式:

  irregular nouns.txt的内容形式:

//gbk编码,每行的第一个词是原形,后面的是变换形态,以\t分隔
grief griefs
roof roofs
gulf gulfs
grief griefs

         irregualr verbs.txt的内容形式:

//gbk编码,每行的第一个词是原形,后面的是变换形态,以\t分隔
bear bore borne born
alight alighted alit alighted alit
arise arose arisen
awake awoke awaked awoken awoke awaked

        如果找到了还原映射,则在dic_ec.txt词典中查找还原后的单词并输出结果。

  1. 若最终该单词没有检索到结果则把他登记到单词缺失词典missing words.txt中。

三、数据说明

  • 英汉词典dic_ec.txt,名词的不规律变换词典irregualr nouns.txt,动词的不规律变换词典irregualr verbs.txt,这几个数据词典的编码以及内容形式都已在技术路线中给出,此处不再赘述。

四、遇到的问题及解决方案

  • 程序实现过程中唯一遇到的问题就是文件编码和分隔符的问题,最后用vim把用到的3个数据词典统一设置成gbk编码,以\t进行分隔,方便程序统一读入处理。

五、性能分析

  • 下面是性能单词查询的耗时截图,平均不超过0.001s:

六、运行环境

  • 将token.exe与dic_ec.txt,irregualr nouns.txt,irregualr verbs.txt,missing words.txt放在同一个目录下,然后点击token.exe即可正确运行程序。

token:NLP之词形还原的更多相关文章

  1. NLP入门(三)词形还原(Lemmatization)

      词形还原(Lemmatization)是文本预处理中的重要部分,与词干提取(stemming)很相似.   简单说来,词形还原就是去掉单词的词缀,提取单词的主干部分,通常提取后的单词会是字典中的单 ...

  2. [JAVA词形还原工具]Snowball

    demo:http://snowball.tartarus.org/demo.php jar download:http://snowball.tartarus.org/download.php (J ...

  3. 史上最详尽的NLP预处理模型汇总

    文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 转自 | 磐创AI(公众号ID:xunixs) 作者 | AI小昕 编者按:近年来,自然语言处理(NL ...

  4. Stanford NLP 学习笔记2:文本处理基础(text processing)

    I. 正则表达式(regular expression) 正则表达式是专门处理文本字符串的正式语言(这个是基础中的基础,就不再详细叙述,不了解的可以看这里). ^(在字符前): 负选择,匹配除括号以外 ...

  5. parsing:NLP之chart parser句法分析器

    已迁移到我新博客,阅读体验更佳parsing:NLP之chart parser句法分析器 完整代码实现放在我的github上:click me 一.任务要求 实现一个基于简单英语语法的chart句法分 ...

  6. 一文学会最常见的10种NLP处理技术

    一文学会最常见的10种NLP处理技术(附资源&代码)   技术小能手 2017-11-21 11:08:29 浏览2562 评论0 算法 HTTPS 序列 自然语言处理 神经网络 摘要: 自然 ...

  7. 自然语言处理(NLP)常用开源工具总结(转)

    ..................................内容纯转发+收藏................................... 学习自然语言这一段时间以来接触和听说了好多开 ...

  8. Java自然语言处理NLP工具包

    1. Java自然语言处理 LingPipe LingPipe是一个自然语言处理的Java开源工具包.LingPipe目前已有很丰富的功能,包括主题分类(Top Classification).命名实 ...

  9. NLP入门(五)用深度学习实现命名实体识别(NER)

    前言   在文章:NLP入门(四)命名实体识别(NER)中,笔者介绍了两个实现命名实体识别的工具--NLTK和Stanford NLP.在本文中,我们将会学习到如何使用深度学习工具来自己一步步地实现N ...

随机推荐

  1. java数据库基本操作(sqlserver 2000为例)

    一.环境搭建 1.下载对应数据库连接驱动包并引入. 2.如果在web中调用必须在tomcat中也放入对应的驱动包. 3.在jre的lib\ext中也加入对应的驱动包. 二.连接数据库 public s ...

  2. 想要薪资20-30K,Python程序员认真敲代码就够了!

    在这个年代,互联网的飞速壮大大家有目共睹,除了表露出的公共受益,其中计算机编程者也是做出了巨大的贡献,即使外国编程语言仍旧属于领导者,但是在互联网的壮大下,我们这是"地球村",国内 ...

  3. Spring4托管Hibernate5并利用HibernateTemplate进行数据库操作

    时隔半年,再次发布配置类的相关Blog,因为左手受伤原因先做一个简述. 首先利用idea创建一个Spring+SpringMVC+Hibernate项目,注意的是因为我们要完全放弃Hibernate以 ...

  4. Python_pickle模块操作二进制文件

    import pickle b=7 i=13000000 fa=99.056 s='中国人民 123abc' lst=[[1,2,3],[4,5,6],[7,8,9]] tu=(-5,10,8) co ...

  5. python3 爬取qq音乐作者所有单曲 并且下载歌曲

    1 import requests import re import json import os # 便于存放作者的姓名 zuozhe = [] headers = {'User-Agent': ' ...

  6. java基础-学java util类库总结

    JAVA基础 Util包介绍 学Java基础的工具类库java.util包.在这个包中,Java提供了一些实用的方法和数据结构.本章介绍Java的实用工具类库java.util包.在这个包中,Java ...

  7. 论文阅读 | CrystalBall: A Visual Analytic System for Future Event Discovery and Analysis from Social Media Data

    CrystalBall: A Visual Analytic System for Future Event Discovery and Analysis from Social Media Data ...

  8. Supported method argument types Spring MVC

    Supported method argument types The following are the supported method arguments: Request or respons ...

  9. JS for循环有关变量类型的问题/魔兽世界样式的tooltip

    <script> var num = 100; for (var i=num-5;i<num+5;i++){ // console.log(typeof(i)); console.l ...

  10. LaTeX 中图片格式错误情况

    Unknown graphics extension: .eps 利用宏包usepackage {graphicx} 是图片和pdflatex一起用时的错误.注:{不是所有的时候,有时候也能通过} 两 ...