使用 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 我认为这是一个分类问题,将句子分类为chilled
和cold
比萨饼是相同的,但不是sucks
一个。一个特定的句子可以用多种方式编写,我认为 POS
标记在这里没有任何帮助
@NikhilParmar 好的,这是一个观点。我可以看到句子的主语/宾语是否相同。但这取决于 OP :)
【参考方案1】:
根据您的问题,您想比较两个句子,然后可能找出它们匹配的百分比。
您可以使用Jaccard Similarity
或Cosine 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,通过精确匹配一项来分块短语