2014-01-18 24 views
2

我正在研究一個項目,其中有一部分我必須輸入句子來檢查它是否是有效的句子。如何在java中使用解析器檢查自然語言句子結構有效性?

例如,如果我將輸入內容設置爲「我在家工作」,那麼輸出會給我「有效句子」,如果我將輸入內容設置爲「我在家工作」,它會給我「無效的句子」。

我搜索了一些像NLP,Stanford Parser這樣的自然語言解析方法,但是如果有人請引導我通過一些關於相關問題的java示例,那將會很有幫助。

對於此幫助,我將不勝感激。謝謝。

+0

沒有解析,但n-gram語言模型怎麼樣(例如參見關於「語言模型」的維基百科文章)?我強烈地認爲你會得到比使用解析器更令人滿意的結果。 – qqilihq

回答

2

無論您是否使用解析樹,您都需要使用Markov process來檢查有效性。特徵可以是單詞序列,詞性標籤序列,分析樹段(即生產規則及其擴展)等。對於這些,可以分別使用tokenizerPOS taggernatural language parser

有效性檢查也將是一個概率分數,而不是絕對的事實。所有(或幾乎所有)自然語言解析器都是統計的。這意味着他們需要訓練數據。這些解析器使用context-free grammarsmildly context-sensitive grammars,如CCG或TAG,它們是自然語言語法的最佳計算近似值之一。

基本上,模型會告訴你在已經看到某個特徵序列之後,特徵出現在有效句子中的可能性有多大。也就是說,它將允許您計算形式P("at"|"am working")P("at"|"home am")的概率。前者應該比後者有更高的可能性。您需要通過實驗確定一個句子被認爲有效的概率。

由於qqlihq評論,這些是根據廣泛的定義language models。然而,對於句子的有效性,你通常不需要衡量困惑。條件概率測量應該足夠了。