2010-09-21 628 views
10

我正在.NET中創建應用程序。使用詞庫的句子生成器

我得到了一個正在運行的應用程序名稱http://www.spinnerchief.com/。它做了我需要它做的事情,但我沒有得到谷歌的任何幫助。 我需要我的應用程序的功能結果,用戶可以給一個句子,然後用戶可以得到相同的句子,但它的措辭不同。

這是我想要的一個例子。

假設我寫了一句「Pankaj是個好人」。輸出應類似於以下內容:

Pankaj是一個偉大的人。
Pankaj是一個出色的男人。
Pankaj是一個可以接受的人。
Pankaj是一個美好的傢伙。
Pankaj是一位出色的男性。
Pankaj是一個很好的人。
潘卡是一個燦爛的紳士

+1

+ +1爲了讓你的眼鏡變得更酷,當你下一次自己拍照! – 2010-09-21 15:02:24

回答

-3

我不知道關於.NET什麼,但你應該考慮使用字典功能(我敢肯定有一個,或者至少一個庫,簡化流程如果沒有)。

然後,你必須通過字符串,並省略「is」或「a」等字。只用你想要的同義詞來表達你的意思。

之後,它很簡單,有一個循環吐出你的句子。

祝你好運。

+1

你是什麼意思的字典功能? – 2012-08-17 17:49:41

7

要正確地爲任何任意句子執行此操作,您需要對源語句執行自然語言分析。您可能需要查看SharpNLP library - 這是一個免費的C#/。NET自然語言處理工具庫。

如果您正在尋找更簡單的方法,您必須願意在一定程度上犧牲正確性。例如,您可以創建一個觸發詞的字典,當它們出現在一個句子中時,它們將被同義詞庫中的同義詞替換。這種方法的問題是確保你用一個等同的詞類替換一個詞。在英語中,根據句子中的上下文用法,某些單詞可能是不同的詞類(動詞,形容詞,副詞等)。

您需要解決的另一個問題(如果您不使用NLP庫)正在形成。在大多數語言中,某些詞類是基於它們應用的主題(或句子的對象,說話者或時態)進行共軛/修飾(英語動詞)。

如果你想要做的只是替換形容詞(如你的例子),使用觸發詞的方法可能會奏效 - 但它不容易擴展。在你做任何事情之前,我會建議你明確定義問題域的要求和規則......並用它來決定採取哪條路線。

3

爲此,您最好使用的是WordNet,它是hyponym/hypernym關係。有一個WordNet .Net圖書館。對於每一個你想交替的單詞,你可以得到它的上位詞(即對於人,上位詞意味着「人是一種......」)或下位詞(「X是一種人」)。然後,只需替換您正在交替的單詞。

你會希望確保你有正確的詞性(即名詞,形容詞,動詞...),還有感官問題,這可能會引入一些不需要的改變(感覺#1是最常見的)。