token:NLP之詞形還原

已遷移到我新博客,閱讀體驗更佳token:NLP之詞形還原 完整代碼實現放在個人github上:click megit

1、任務描述

  • 形態還原算法:
    1. 輸入一個單詞
    2. 若是詞典裏有該詞,輸出該詞及其屬性,轉4,不然,轉3
    3. 若是有該詞的還原規則,而且,詞典裏有還原後的詞,則輸出還原後的詞及其屬性,轉4,不然,調用<未登陸詞模塊>
    4. 若是輸入中還有單詞,轉(1),不然,結束。

2、技術路線

  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條規則:github

//第三人稱單數
規則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的內容形式:vim

//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中。

3、數聽說明

  • 英漢詞典dic_ec.txt,名詞的不規律變換詞典irregualr nouns.txt,動詞的不規律變換詞典irregualr verbs.txt,這幾個數據詞典的編碼以及內容形式都已在技術路線中給出,此處再也不贅述。

4、遇到的問題及解決方案

  • 程序實現過程當中惟一遇到的問題就是文件編碼和分隔符的問題,最後用vim把用到的3個數據詞典統一設置成gbk編碼,以\t進行分隔,方便程序統一讀入處理。

5、性能分析

  • 下面是性能單詞查詢的耗時截圖,平均不超過0.001s:

1541928466093

6、運行環境

  • 將token.exe與dic_ec.txt,irregualr nouns.txt,irregualr verbs.txt,missing words.txt放在同一個目錄下,而後點擊token.exe便可正確運行程序。
相關文章
相關標籤/搜索