【问题标题】:Sentence generator using Thesaurus使用词库的句子生成器
【发布时间】:2010-09-21 14:50:58
【问题描述】:

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

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

这是我想要的示例。

假设我输入一个句子“Pankaj is a good man”。输出应该类似于以下输出:

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

【问题讨论】:

  • +1 是一种聪明的方式,让您的护目镜在您下次自己戴上护目镜时觉得自己很酷!

标签: c# thesaurus


【解决方案1】:

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

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

您需要解决的另一个问题(如果您不使用 NLP 库)是词干提取。在大多数语言中,某些词类会根据它们所适用的主语(或句子的宾语、说话者或时态)进行变位/修饰(英语中的动词)。

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

【讨论】:

    【解决方案2】:

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

    你需要确保你有正确的词性(即名词、形容词、动词......),还有感觉问题,这可能会引入一些不受欢迎的交替(感觉 #1 是最常见)。

    【讨论】:

      【解决方案3】:

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

      然后,您必须遍历字符串,并省略“is”或“a”之类的单词。只取你想有同义词的词。

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

      祝你好运。

      【讨论】:

      • 字典函数是什么意思?
      猜你喜欢
      • 1970-01-01
      • 2017-12-21
      • 2016-08-23
      • 2021-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-11
      • 1970-01-01
      相关资源
      最近更新 更多