java - 如何借助词袋进行概念表征

标签 java algorithm nlp linguistics

感谢您停下来阅读我的问题 :) 这是一个充满伟大人民的好地方!

我有一个关于“用单词造句”的问题。不不,这与英语语法无关:)

让我解释一下,如果我有像这样的词袋

"person apple apple person person a eat person will apple eat hungry apple hungry"

并且它可以生成某种下面的句子

"hungry person eat apple"

我不知道这个主题将涉及哪个领域。我应该在哪里寻找答案。我试图搜索谷歌,但我只找到了英语语法的东西:)

有谁能告诉我哪种算法可以解决这个问题?或任何程序

谢谢

P.S:这不是作业 :) 如果是,我会要求提供源代码!我什至不知道我应该在哪个领域寻找 :)

最佳答案

当今大多数成功的语言解析器都是基于统计的,这就是(例如)谷歌翻译的工作原理。你要做的是获得一个大型语义标记语料库并开始遍历单词表。语言上有效的英语句子集比生成语法(一种较旧的方法)更大,但是大型语料库将为您提供大量可行的句子模板。你可以通过任何数据遍历技术从你的包中造句,从随机游走到遗传算法。让我们知道您的工作!

这里有一组很棒的资源可供启动:Stanford statistical natural language processing and corpus-based computational linguistics resources

回应以下 OP 评论: 要生成句子,您必须具有有效句子的抽象表示。一个简单的例子是生成语法中的 SUBJECT VERB OBJECT。您也可能会得到 SUBJECT VERB ADJECTIVE OBJECT。问题是你可以用语法正确的废话来填满它,比如“我吃了饿了的苹果”。统计分析会告诉你,“hungry apple”是一个你几乎从未见过的组合——它不太可能出现在真正的英语(你的语料库)中,所以即使不必知道它的意思我也可以将其排除句子。如果您正在编写一个语法检查程序,您可能会在该词对下划线以表示有问题。

由于您正在编写一个句子生成器,您只需要反转该过程——一个简单的可能性是简单地生成一大组单词的随机组合,然后对照您的数据库检查它们以查看单词是否链都满足一定的可能性阈值,例如 80%。另一种选择是将单个词链视为遗传算法中的基因,经过几代之后,像“饥饿的苹果”这样的链将消失,取而代之的是更成功的基因,如“红苹果”。使用像您提到的那样的小“词袋”,您不需要那么花哨,您可以毫无问题地用 numwords < n 测试每个可能的句子。当您的词袋太大而无法穷举计算时,您只需要花点时间在句子搜索算法上。

上面的链接确实有几个可以下载和使用的标记语料库,以及大量用于标记您自己的语料库的示例程序。但如果这只是一个无聊的好奇心项目,您确实希望保持简单。让我提出另一个建议——可用的最大语料库之一是 Google 的网络索引。您在谷歌搜索中用引号引起来的任何句子或短语都会返回大量匹配项。例如,“红苹果”返回超过一百万次点击,而“饥饿的苹果”仅返回 11,000 次。您可以使用它为带有小词袋的句子的有效性构建一个小的统计标记。如果统计过程对你来说太复杂而无法实现,那么考虑用词性标记你的词袋(研究词性标记)并为你的程序提供各种抽象句子模板——你仍然会得到类似“A person will eat a hungry apple”这样的句子,但根据您的需要,这可能就足够了。 :)

附言如果你的词袋中没有“an”这个词,你看起来就会局限于 Tarzan 语法和食人苹果的世界:)

关于java - 如何借助词袋进行概念表征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2376662/

相关文章:

arrays - 如何使用回答是和否的 oracle 对每个整数都属于集合 {1,2,3,,,k} 的 N 个元素的数组进行排序?

algorithm - 如何在无向图中找到反馈边集

python - 为什么NLTK中的pos_tag将 "please"标记为NN?

Java ArrayList 的递归合并排序

java - java inputstream 可以读取正在内存中更新的文件吗?

java - 从 HTML 转换为 PDF 时定义页面大小

java - 子集和问题: Returning a Variant of the Required Subset

algorithm - 测量两个短语之间的语义相似度

node.js - 使用 Node.js 和 Python 进行 NLP 的聊天机器人

java - 了解内容提供者和解析器