使用 NLTK 将两个字符串匹配在一起?

Posted

技术标签:

【中文标题】使用 NLTK 将两个字符串匹配在一起?【英文标题】:Matching two strings together using NLTK? 【发布时间】:2016-04-23 04:48:53 【问题描述】:

所以我正在尝试编写一个接收 2 个字符串的程序,例如:

"I like pizza better cold"

"I really enjoy pizza when it is chilled"

并找出这两件事是否相互匹配,例如:

"I like pizza better cold"

"Pizza really sucks."

以上内容不匹配。

我已经使用可用于 Python 的 NLTK 语言来执行此操作。我只是想知道是否有人以前做过类似的事情并有任何建议? NLTK 是要走的路吗?我应该使用什么功能或规格?

我正在考虑将字符串拆分为标记,然后挑选形容词和名词作为标记的主要方法,然后可能使用情绪分析算法来确定它是否是肯定的,然后根据此匹配字符串.. .

这只是我为了好玩而做的一个小项目,所以在这里任何事情都会有好处:)

干杯, 会

【问题讨论】:

我不认为NLTK 有这样的东西。您必须制作一个自定义程序,其中 pizza really sucks 有上述句子的列表或只有 chill,cold 。简而言之,您需要有单词词典并将它们指向一个句子,如果它们出现在句子。 Mhhhrgh,我认为您应该从更好地了解 NLP 开始。当然,这是一个困难的话题(我只是一个业余爱好者)。你有一个好的开始:nltk.org/book_1ed 我不太明白你的问题,但它闻起来像 POS 标记,其中 POS 代表词性。几乎就是你在小学时所做的。 在nltk.org/book/ch05.html 中,您介绍了使用 nltk 进行 POS 标记。 @geekazoid 我认为这是一个分类问题,将句子分类为chilledcold 比萨饼是相同的,但不是sucks 一个。一个特定的句子可以用多种方式编写,我认为 POS 标记在这里没有任何帮助 @NikhilParmar 好的,这是一个观点。我可以看到句子的主语/宾语是否相同。但这取决于 OP :) 【参考方案1】:

根据您的问题,您想比较两个句子,然后可能找出它们匹配的百分比。

您可以使用Jaccard SimilarityCosine Similarity 来查找句子之间的相似性。

关于余弦相似度参考这里How to calculate cosine similarity given 2 sentence strings? - Python

如果余弦相似度较小,则句子不相似,但如果接近 1,则句子相似

NLTK 可用于查找句子中单词的同义词,以便从句子中获取语义。

要查找同义词,您可以使用以下代码:

from nltk.corpus import wordnet as wn
wn.synsets(your word)

【讨论】:

余弦相似度的实现肯定是一个很好的“保证”检查,或者是第一次通过检查。鉴于 NLTK 实现需要更繁重的检查过程,这可能是在使用更重的比较功能之前的快速检查。感谢您提供的信息,我相信这最终会进入实施 :) 我也在研究锤击距离,这与此处的余弦相似度相同,对吗?干杯 我对锤击距离一无所知,需要阅读。很高兴为您提供帮助:) 必须是锤击距离而不是锤击距离en.wikipedia.org/wiki/Hamming_distance。 感谢@Riyaz 的更正!是的,我的意思是汉明距离:) @Willy 如果您认为它对您有用,您可以选择此答案

以上是关于使用 NLTK 将两个字符串匹配在一起?的主要内容,如果未能解决你的问题,请参考以下文章

将字母和数字匹配在一起或仅匹配字母的正则表达式

NLTK RegexpParser,通过精确匹配一项来分块短语

STM32:将 USART 与字符匹配 ISR 和 DMA 缓冲区一起使用

COUNTIFS公式,匹配多个字符串

想找一个解决两个字符串匹配程度的算法。

JS 正则表达式^$详解,脱字符^与美元符$同时写表示什么意思?