NLP,用于确定文本块是不是与其他“相似”的算法(在已经匹配关键字之后)
Posted
技术标签:
【中文标题】NLP,用于确定文本块是不是与其他“相似”的算法(在已经匹配关键字之后)【英文标题】:NLP, algorithms for determining if block of text is "similar" to other (after already having matched for keyword)NLP,用于确定文本块是否与其他“相似”的算法(在已经匹配关键字之后) 【发布时间】:2011-12-27 13:43:51 【问题描述】:我一直在尽可能多地阅读 NLP 并在此处进行搜索,但没有找到任何似乎可以准确解决我正在尝试做的事情的内容。我对 NLP 很陌生,之前只接触过一些小知识,到目前为止,我已经让我正在使用的 NLP 处理器工作到可以从文本中提取词性的地方。
我只是在处理一个小样本文档,然后是一个“输入短语”,我基本上是在尝试找到一个匹配项。到目前为止我写的代码基本上是这样的:
获取输入短语和“searchee(正在搜索的文档)”并将它们分解为单个单词的列表,然后还获取每个单词的 POS。用户还会在输入短语中输入一个 kewyord(并且应该在正在搜索的文档中) 搜索两个列表以查找用户输入的关键字,然后,对于在每个文档中找到该关键字的第一个位置,取之前和之后的一组单词(例如 5 个)。这些被放入数据集中进行处理,所以如果一篇文章有:关键字:足球
“很多运动都很有趣,足球是一项很棒的运动,但也是一项非常体力的运动。” - 然后我的过程会将其截断为“很有趣,足球是一种”
我的目标是比较这些片段,例如“很有趣,足球是一种”的相似性,就好像它们可能在相似的上下文中使用一样,等等。
我想知道是否有人能指出我在可用于此的模式、算法等方面的正确方向。上面的例子很简单,只是为了给出一个想法,但我打算做如果我能找到合适的地方来了解更多信息,这会更复杂。感谢您提供任何信息
【问题讨论】:
经过更多搜索,这个问题似乎涉及到一些类似的东西:***.com/questions/1746501/… 这似乎也是一个很好的资源:@987654322@ 感谢大家帮助我走上正确的道路,现在我开始了解一些术语以知道要搜索什么 @eowl,谢谢,我刚刚致力于 NLP 网站的提案 【参考方案1】:看来您正在解决古老的KWIC 问题。这可以通过索引来完成,或者只是一个简单的for
循环遍历文本中的单词:
for i = 0 to length(text):
if text[i] == word:
emit(text[i-2], text[i-1], text[i], text[i+1], text[i+2])
emit
可能意味着打印它们,将它们存储在哈希表中,等等。
【讨论】:
我认为这比我正在尝试做的更基本,我不是在寻找完全匹配,因为我不希望找到它 @Rick:我并不完全清楚程序的最终输出应该是什么,但是为了调查可能出现单词的上下文,您可能需要阅读 @987654322 的搭配查找章节@ 或以其他方式阅读 pointwise mutual information。 谢谢,会检查一下,我想这对我来说有点难以解释以及我认为它会是什么,但是如果一个短语“接近”到另一个短语但不准确【参考方案2】:您尝试做的更多是经典的Information Retrieval 问题,而不是 NLP,尽管它们非常相似。你正在构建一个Term-Frequency dictionary。
我不确定您所说的 POS 是什么意思,但您正试图从文本中提取短语的“带状疱疹”,并将它们与语料库中的其他带状疱疹进行比较。您可以通过cosine similarity 或通过计算短语之间的String Edit Distance 来计算相似度。
查看一些介绍性 IR 幻灯片可能有助于阐明这些概念。 Dr. Rao Kambhampati generously makes slides and audio lectures available on his site.
【讨论】:
感谢您提供的信息,我所说的 POS 只是指基本的词性,例如此处“单词级别”中列出的那些:bulba.sdsu.edu/jeanette/thesis/PennTags.html 您提供的信息应该是一个很好的起点跨度> 另外,我不确定我在 OP 中是否清楚,我正在尝试比较 POS 中的短语模式,而不是实际单词,因为我已经匹配了关键字【参考方案3】:如果您只想生成文本,可以查看此处http://phpir.com/text-generation。如果您想寻找相似之处,您可以寻找 trigram-search 或更简单的带有 trie 的通配符搜索:http://phpir.com/tries-and-wildcards。这里有一篇关于shingling的好文章:http://phpir.com/shingling-near-duplicate-detection
【讨论】:
谢谢,我之前确实遇到过一些关于尝试的事情,会进一步研究以上是关于NLP,用于确定文本块是不是与其他“相似”的算法(在已经匹配关键字之后)的主要内容,如果未能解决你的问题,请参考以下文章