感谢您停下来阅读我的问题:)这是一个非常甜蜜的地方,充满了伟大的人民!
我有一个关于“用文字创建句子”的问题。不,这不是关于英语语法:)
让我解释一下,如果我有一袋像
这样的话"person apple apple person person a eat person will apple eat hungry apple hungry"
它可以生成某种后续句子
"hungry person eat apple"
我不知道这个主题会涉及哪个领域。我应该在哪里找到答案。我试图搜索谷歌,但我只发现英语语法的东西:)
那里有谁可以告诉我哪个算法可以解决这个问题?或任何程序
由于
P.S:这不是一个任务:)如果我会要求源代码!我甚至不知道我应该在哪个领域寻找:)
答案 0 :(得分:3)
今天大多数成功的语言解析器都是基于统计的,这就是(例如)Google Translate的工作原理。你所做的是获得一个大型的语义标记语料库并开始走字图表。语言有效英语句子的集合大于生成语法(旧方法),但是大型语料库将为您提供大量可行的句子模板。您可以通过任何数据遍历技术从随机行走到遗传算法从您的包中制作句子。让我们知道你做了什么!
回应以下OP评论: 要生成句子,您必须具有有效句子的抽象表示。一个简单的例子是生成语法中的SUBJECT VERB OBJECT。您也可能获得SUBJECT VERB ADJECTIVE OBJECT。问题是你可以用语法正确的废话填写它,例如“我吃了饥饿的苹果”。统计分析会告诉你的是,“饥饿的苹果”是你几乎从未见过的组合 - 它不太可能以真正的英语(你的语料库)出现,所以甚至不必知道我可以消除的意义。句子。如果您正在编写语法检查程序,则可能会将该单词对强调为可疑。
由于您正在编写一个句子生成器,您只需要反转该过程 - 一个简单的可能性就是简单地生成一大堆随机的单词组合,然后根据您的数据库检查它们以查看单词链都满足一定的可能性阈值,例如80%。另一种选择是将单个词链作为遗传算法中的基因处理,并且在几代之后,像“饥饿的苹果”这样的链将会消失,转而支持像“红苹果”这样的更成功的基因。使用像你提到的那个小的“单词包”你不需要那么花哨,你可以用numwords<来测试每个可能的句子。没有问题。当你的单词包太大而无法进行详尽的计算时,你只需要在你的句子搜索算法中使用它。
上面的链接确实有几个可以下载和使用的标记语料库,以及大量用于标记自己语料库的示例程序。但是如果这只是一个空闲好奇的项目,你确实希望保持简单。让我提出另一个建议 - 最大的语料库之一是谷歌的网络索引。您在Google搜索中放入引号的任何句子或短语都会返回多个匹配。例如,“红苹果”返回超过一百万次点击,而“饥饿的苹果”仅返回11,000次。您可以使用它来使用一个小字袋为您的句子的有效性构建一个小的统计标记。如果统计过程太复杂而无法实现,请考虑用词性标记单词包(研究词性标注)并为您的程序提供各种抽象句模板 - 您仍会得到像“一个人会吃一个饥饿的苹果”这样的句子,但根据你的需要,这可能已经足够了。 :)
P.S。在你的文字袋中没有“an”这个词你看起来只限于泰山语法和吃人苹果的世界:)
答案 1 :(得分:-1)
我想你可能会想到Generative Grammars,但我不太确定。