2015-08-28 179 views
1

我正在使用Stanford-NLP Java庫。我發現它在處理句子的詞幹化,詞形化和標記化成詞時最準確。使用斯坦福大學自然語言處理單詞Tokenization

我的要求是標記化詞語,比如「皮夾克」可以被正確解釋爲「皮夾克」。在這個級別上,我沒有處理拼寫糾正,但請讓我知道這是否可能。

回答

1

這是一個複雜的問題,因爲你假設你是在詞語上標記化,而不是在令牌/原始語言單位上。維基百科描述標記化如:

在詞法分析,標記化是打破文本流 成單詞,短語,符號,或其他有意義的元件 稱爲令牌的過程。

的PTBTokenizer(CoreNLPs初級標記生成器)上分割大致,而不是實際的話。因此,下面的句子將產生6個令牌。

我有一個非常酷的leatherjacket

[ '我', '有', 'A', '真', '酷', 'leatherjacket']

應該理解的是符號化如果你不這麼認爲,我可以推薦一個解決方案作爲你的標記化過程的先驅。谷歌聯合聲名狼借的Artifical Intelligence: A Modern approach討論了他的玩具(概率/判別)算法,該算法達到了80%至90%的準確度。 implementation he published is in Python,但已被移植到其他可能適合您需要的語言。 Rael GC在42行中實現了Java解決方案,這在his website上非常令人印象深刻。

或者,您可以創建自己的標記器,它更進一步,是某種混合拼寫校正器/標記器。然而,這將是荒謬的困難/乏味,並且由於新穎性而值得出版。但簡短的回答,這裏沒有金色的子彈。

+0

感謝您的建議!目前我正在使用PTBTokenizer,它的工作原理與您所提到的一樣。您分享的鏈接很好閱讀。我想進一步挖掘一下我自己的單詞分詞器或單詞標記器和拼寫糾正器。 – tom

0

我不確定我們現在有什麼事情可以做。但是我個人曾經在這個問題上做過工作,將這樣一個組件添加到斯坦福CoreNLP可能會很有趣。

我簡單的方法基本上是:

  1. 構建的合理頻繁的字的字典(維基百科?)(你希望「皮革」和「夾克」在字典中,但不是「皮夾克」)

  2. 對於給定的單詞,生成拆分候選,每個單詞的最小大小(你想拆分「 leatherjacket」到‘皮’和‘外套’,你不想拆‘非政治化’到‘一’和‘政治’)

  3. 計算你一起搗爛字和比例兩字

    (發生「皮革」「夾克」)/(發生「皮夾克」)

    如果這個比例超過某個閾值, 「leatherjacket」與「皮革」「外套」的地方

  4. 我生成了一個砸在一起的例子的長長的清單,並根據我的訓練數據調整了我的門檻。

+0

感謝您的回覆。我試圖找到一種算法,以最小的複雜度爲我提供所需的功能,並瞭解了遺留動態編程(O(n^2))。我想給它一個鏡頭。再次感謝提到的技巧。 – tom