已迁移到我新博客,阅读体验更佳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. java8完全解读一

    java8完全解读 java8完全解读前言java8的一些新特性1.为什么要用java8?1.1首先想到的逻辑应该是如下1.2使用策略模式来解这个问题1.3使用策略模式和内部类来解决问题1.4使用策略 ...

  2. HTML学习笔记6:列表标签

    列表标签     什么是列表标签呢? 以平台区分有什么游戏? 手游 pc游戏 家用机游戏 掌机游戏 以游戏类型区分有什么游戏? RPG ARPG MMORPG ACT FPS 以上两种就是一种列表标签 ...

  3. Java MD5加密与RSA加密

    区别: MD5加密: 加密时通过原字符串加密成另一串字符串 解密时需要原加密字符串进行重新加密比较两次加密结果是否一致 T=RSA加密: 加密时通过原字符串生成密钥对(公钥+私钥) 解密时通过公钥和私 ...

  4. python_汉塔诺

    '''据说古代有一个梵塔,塔内有三个底座A.B.C,A座上有64个盘子,盘子大小不等,大的在下,小的在上.有一个和尚想把这64个盘子从A座移到C座,但每次只能允许移动一个盘子,在移动盘子的过程中可以利 ...

  5. 读《图解HTTP》有感-(HTTP首部)

    写在前面 该章节是对请求报文及响应报文的首部信息进行解析.通过该章节的学习,相信大家对首部结构,及各个首部字段的作用有个基本的了解 正文 HTTP报文由HTTP报文首部.空行以及HTTP报文主体组成. ...

  6. 如何使用 toml 配置 SpaceVim

    配置 SpaceVim 主要包括以下几个内容: 设置 SpaceVim 选项 启动/禁用模块 添加自定义插件 添加自定义按键映射以及插件配置 设置SpaceVim选项 原先,在 init.vim 文件 ...

  7. JaveScript基础(1)之变量和数据类型

    1.JaveScript变量的定义方式: A:隐式定义:直接给变量赋值: temp='hello'; alert(temp); PS:使用变量前要先进行初始化工作,否则会报变量未被定义的错误; B:显 ...

  8. jquery-layer弹框在火狐浏览器中弹框不显示的问题

    在使用layer控件设置弹框时, 谷歌浏览器中能正常弹出, 显示在页面中央位置. 而在火狐浏览器中, 弹框只显示标题, 并且弹框内容不显示. 在火狐浏览器中弹框的效果如下图红色方框中的弹出框所示, 但 ...

  9. PAT1032: Sharing (25)

    1032. Sharing (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue To store Engl ...

  10. @component @bean区别

    from: http://stackoverflow.com/questions/10604298/spring-component-versus-bean http://stackoverflow. ...