2015-03-13 110 views
0

我們有很多文字(大部分是用英文書寫的),這些文字被錯誤地導入(來自我們無法控制的)。例如拆分字符串當沒有分隔符加入的詞

  1. configuredincorrectly - 到2個字configured & incorrectly
  2. RegardsJohn Doe - 成字Regards和命名實體John Doe
  3. To: [email protected]:[email protected]:[email protected] - 成3元組(To,[email protected])(CC,[email protected])(BCC,[email protected])
  4. problem.Possible - 成2字problem & possible

我承認我們正在努力解決這裏的多個問題。人們很容易寫不可擴展的代碼每次我們試圖解決特定骯髒的文本方案時間如

  1. 正則表達式,
  2. 與string.replace(關鍵字,keywordwithSpace)

任何人都可以請我指向一個(部分)解決方案的問題1 & 2?

使用自然語言理解的解決方案將是最理想的。 我們的詞彙量有1000字左右,如[溝通,數據庫,硬件,網絡,問題,糾正,解決方案等]。有沒有一種方法可以「訓練」一個模型,以識別像hardwarefailure這樣的詞真的意味着2個單獨的詞hardware & failure

非常感謝提前!

+0

你不能在這裏使用正則表達式.. – 2015-03-13 09:39:41

回答

2

某些語言(如中文)在單詞之間沒有空格(或其他分隔符)。因此,我認爲,爲分割此類語言而開發的方法在此處可能很有用(請參閱this paper,例如系統說明以及this one)。

的基本想法是,我們訓練一些分類字符分類:

每一箇中國字可以分配的四種可能的邊界 標籤之一:小號一個字符出現作爲一個單一的個字符數字, 爲開始多字符單詞的字符,則該端部的多字符單詞字符ë,和中號一個字符 既不是第一個也不是最後一個」

分類可以最大熵模型,條件隨機場,反覆發作的神經網絡,或者其它一些。實現它們的代碼很容易作爲獨立程序和(對於許多分類器)作爲python庫/綁定來使用。谷歌搜索應該揭示其中的很多。

因此,我們可以採取大量損壞的文本(可以很容易地生成)併爲每個字母分配標籤(如果我們從原始表單生成損壞的文本,可以自動完成)。這將給我們提供訓練集,儘可能大。對於字符串中的每個字符,我們需要生成特徵向量(通常包括有關先前字符的信息,但我們可以添加一些基於字典的特徵)。在運行時,我們可以首先標記字符串,如「hardwarefailure」,並將其分割爲標有「B」的字符。

需要注意的一點是:開發任何機器學習解決方案可能非常耗時,有時可能無法工作,尤其是如果您以前從未這樣做過。

1

對於包含鏈接到Python ICU library的相同問題,有answer

Python中有working code基於字典與頻率。

也請看this question:作者已經開發出工作解決方案 - 它是用Java編寫的,但是開源並且有文檔。