我试图确定两个词之间的相似性;一个拼写正确,另一个可能包含或可能不包含拼写错误。
现在要执行此操作,我先使用TFIDFvectorizer对两个术语进行矢量化,然后使用相似性方法确定它们之间的相似性。
这适用于以下类型的示例:
Original term | Input term | Similarity
---------------------------------------
red car | red car | 1.0
red car | big red car | 0.75
但是,如果出现拼写错误,例如:
Original term | Input term | Similarity
------------------------------------------
red car | redd carr | 0.0
它提供了0
的相似性,即使它们有些相似(我不是要获得1.0
的相似性,而是要获得相似性> 0.0
我要考虑的一个问题是将每个单词分解为X个字符,以便每个术语为:
Original term = ['re', 'ed', 'd ', ' c', 'ca', 'ar']
Input term = ['re', 'ed', 'dd', 'd ', ' c', 'ca', 'ar', 'rr']
然后确定它们之间的相似度并计算平均相似度。
对于可能解决此问题的其他建议,我将非常感谢。
答案 0 :(得分:1)
difflib对您有帮助吗? 我认为它可能适合更长的顺序。
In[1]: import difflib
In[5]: mr = difflib.SequenceMatcher()
In[7]: mr.set_seqs('red car', 'redd carr')
In[8]: mr.ratio()
Out[8]: 0.875
In[9]: mr.set_seqs('red car', 'redd ship')
In[10]: mr.ratio()
Out[10]: 0.5
答案 1 :(得分:1)
我建议您检查以下链接,其中显示How to Write a Spelling Corrector。
出于tf-idf的目的,您可能也只对单词的词根有兴趣。 nltk
库,特别是stem()
部分(请检查以下link),可以帮助您完成该过程。但是,如果您的问题仅在于这些特定的单词,则可以为此拼写错误创建一个替换函数,并在使用tf-idf之前将其传递给它。