使用同义词库的句子生成器

时间:2010-09-21 14:50:59

标签: c# thesaurus

我正在.NET中创建一个应用程序。

我有一个正在运行的应用程序名称http://www.spinnerchief.com/。它做了我需要做的事情,但我没有得到谷歌的任何帮助。 我需要我的应用程序的功能结果,用户可以给出一个句子,然后用户可以得到相同的句子,但措辞不同。

这是我想要的一个例子。

假设我写了一句“Pankaj是个好男人”。输出应类似于以下输出:

  Pankaj是一个伟大的人       Pankaj是一位出色的人       Pankaj是一个可以接受的人       Pankaj是个很棒的家伙       Pankaj是一位出色的男性       Pankaj是个好人       Pankaj是一位出色的绅士

3 个答案:

答案 0 :(得分:7)

要正确执行任何任意句子,您需要对源句进行自然语言分析。您可能需要查看SharpNLP library - 这是一个免费的C#/ .NET自然语言处理工具库。

如果你正在寻找一种更简单的方法,你必须愿意在某种程度上牺牲正确性。例如,您可以创建一个触发词的字典,当它们出现在句子中时 - 用同义词中的同义词替换。这种方法的问题是确保用等效的词性替换单词。在英语中,某些单词可能是基于句子在句子中的使用而言是不同的词性(动词,形容词,副词等)。

您需要解决的另一个问题(如果您没有使用NLP库)正在阻止。在大多数语言中,某些词性基于它们适用的主语(或句子的对象,说话者或时态)进行共轭/修饰(动词为英语)。

如果你想做的只是替换形容词(如你的例子),使用触发词的方法可能有效 - 但它不易扩展。在您做任何事情之前,我建议您明确定义问题域的要求和规则......并使用它来决定采用哪条路线。

答案 1 :(得分:3)

为此,您最好使用的是WordNet,它的下位词/上位词关系。有一个WordNet .Net库。对于你想要交替的每个单词,你可以得到它的上位词(即对于人,上位词意味着“人是一种......”)或下位词(“X是一种人”)。然后只需替换你交替的单词。

你需要确保你有正确的词性(即名词,形容词,动词......),还有感官问题,可能会引入一些不希望的变化(感觉#1是最常见的。)

答案 2 :(得分:-3)

我对.Net一无所知,但你应该考虑使用字典功能(我确定有一个,或者至少有一个库可以简化流程,如果没有的话)。

然后,你必须通过字符串,并省略像“是”或“a”这样的词。只接受你想要的同义词。

在此之后,让一个循环吐出你的句子非常简单。

祝你好运。