相关疑难解决方法(0)

wordnet路径相似性是否可交换?

我正在使用nltk的wordnet API.当我将一个synset与另一个synset进行比较时,我得到了None但是当我比较它们时,我得到一个浮点值.

他们不应该给出相同的价值吗?有解释还是这是wordnet的错误?

例:

wn.synset('car.n.01').path_similarity(wn.synset('automobile.v.01')) # None
wn.synset('automobile.v.01').path_similarity(wn.synset('car.n.01')) # 0.06666666666666667
Run Code Online (Sandbox Code Playgroud)

python nlp nltk wordnet

15
推荐指数
2
解决办法
3538
查看次数

比较英语句子相似度的算法

我有一系列句子,我需要分析它们,看看它们有多相似.

有没有建立的算法来做到这一点?

我很在乎:

  • 包含相同的单词(暂时忽略拐点)
  • 以相似的顺序包含相同的单词

我之前使用Levenshtein距离和n-gram进行拼写,虽然我不完全相信这些是否符合我的目的.

天真地说,"我不关心拼写差异,拼写错误可以被视为不同的词语",尽管考虑到这一点可能会很好.

也许在空间分割句子和上述(或其他)算法之一的混合可能是一个起点

有哪些选择?有什么建议?

谢谢!

algorithm

11
推荐指数
1
解决办法
2939
查看次数

使用python nltk查找两个网页之间的相似性?

我想找出两个网页是否相似.有人可以建议如果python nltk与wordnet相似性功能有用,如何?在这种情况下使用的最佳相似度函数是什么?

python nlp nltk wordnet

7
推荐指数
1
解决办法
5985
查看次数

如何在Python中取消单词?

我想知道我是否可以将它们解除为正常状态?

问题是我有成千上万的不同形式的单词,例如吃,吃,吃,吃等等,我需要计算每个单词的频率.所有这些 - 吃,吃,吃,吃等都会计入吃,因此,我使用了茎.

但问题的下一部分要求我在数据中找到相似的单词,我使用nltk的同义词来计算单词中的Wu-Palmer相似度.问题是nltk的同义词不会对词干词起作用,或者至少在这段代码中它们不会.检查两个单词是否相互关联

我该怎么办?有没有办法解除一个字?

python nlp nltk

7
推荐指数
3
解决办法
4859
查看次数

字符串之间的缩写相似度

我的项目中有一个用例,我需要将key-string 与很多字符串进行相似性比较。如果这个值大于某个阈值,我认为这些字符串与我的“相似” key,并根据该列表,我进行一些进一步的计算/处理。

我一直在探索模糊匹配字符串相似性的东西,它使用edit distance基于“levenshtein、jaro 和 jaro-winkler”相似性的算法。

尽管它们工作得很好,但如果一个字符串是另一个字符串的“缩写”,我希望获得更高的相似度分数。有没有我可以使用的算法/实现。

笔记:

language: python3 
packages explored: fuzzywuzzy, jaro-winkler
Run Code Online (Sandbox Code Playgroud)

例子:

using jaro_winkler similarity:

>>> jaro.jaro_winkler_metric("wtw", "willis tower watson")
0.7473684210526316
>>> jaro.jaro_winkler_metric("wtw", "willistowerwatson")
0.7529411764705883

using levenshtein similarity:

>>> fuzz.ratio("wtw", "willis tower watson")
27
>>> fuzz.ratio("wtw", "willistowerwatson")
30
>>> fuzz.partial_ratio("wtw", "willistowerwatson")
67
>>> fuzz.QRatio("wtw", "willistowerwatson")
30
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果可能的话,我希望分数更高(>90%)。我也可以接受很少的误报,因为它们不会对我的进一步计算造成太多问题。但是,如果我们匹配 s1 和 s2,使得 s1 完全包含在 s2 中(反之亦然),那么它们的相似度得分应该会高得多。

编辑:我的用例的更多示例

对我来说,空格是多余的。这意味着,wtw被视为“willistowerwatson”和“willis tower watson”的缩写。

另外,stove是“STack OVERflow”或“STandardOVErview”的有效缩写

一种简单的算法是从较小字符串的第一个字符开始,看看它是否存在于较大字符串中。然后检查第二个字符,依此类推,直到条件满足第一个字符串完全包含在第二个字符串中。这对我来说是 100% 匹配。

诸如“willistowerwatson”之类的进一步示例wtwx可以给出例如 80% …

python edit-distance similarity jaro-winkler

7
推荐指数
1
解决办法
1016
查看次数

使用NLTK比较术语/表达的相似性?

我试图比较那些与语义相关的术语/表达 - 这些不是完整的句子,也不一定是单个单词; 例如 -

"社交网络服务"和"社交网络"显然密切相关,但如何使用nltk对此进行量化?

显然我甚至错过了代码:

w1 = wordnet.synsets('social network')
Run Code Online (Sandbox Code Playgroud)

返回一个空列表.

关于如何解决这个问题的任何建议?

python nltk

6
推荐指数
1
解决办法
1万
查看次数

如何使用Python NLTK计算WordNet中两个形容词之间的最短路径(测地)距离?

使用几种内置的相似性度量可以轻松地计算WordNet中两个同义词集之间的语义相似性,例如:

synset1.path_similarity(synset2)
Run Code Online (Sandbox Code Playgroud)

synset1.lch_similarity(synset2),Leacock-Chodorow相似度

synset1.wup_similarity(synset2),吴帕尔默相似

(如此处所示)

然而,所有这些都利用了WordNet的分类关系,这些关系是名词和动词的关系.形容词和副词通过同义词,反义词和属性相关联.如何衡量两个形容词之间的距离(跳数)?

我尝试过path_similarity(),但正如预期的那样,它会返回'None':

from nltk.corpus import wordnet as wn
x = wn.synset('good.a.01')
y = wn.synset('bad.a.01')


print(wn.path_similarity(x,y))
Run Code Online (Sandbox Code Playgroud)

如果有任何方法来计算一个形容词与另一个形容词之间的距离,那么指出它将会非常感激.

python nlp nltk wordnet cosine-similarity

5
推荐指数
1
解决办法
2197
查看次数