【问题标题】:How to iterate through two Python lists to get words similar in Spanish and English如何遍历两个 Python 列表以获取西班牙语和英语中相似的单词
【发布时间】:2020-01-13 03:36:33
【问题描述】:

我有两个很长的列表,一个是英文单词,另一个是来自 google.translate 的西班牙语翻译。顺序完全对应。例如 English_list = ['偏见','可怕','恶性','骇人听闻','批准'] spanish_list =['perjudial', 'grave', 'maligno', 'atroz','ratificar']

我需要从两个列表中获取在字母方面或多或少相似的所有单词

我首先通过检查两个词的开头是否有相似的字母,但后来意识到在某些情况下相似的词的开头略有不同(例如“prejudicial” - “perjudial”)

所需的输出是在标题“English”和“Spanish”下有两列的表格,它们有相似的词,但不包括那些看起来不同的词:

英语         西班牙语


不公正的       不公正的
恶性的                                                                                                     ,
批准             批准书

【问题讨论】:

  • 您可能希望使用可能计算编辑距离的 levenshtein 距离进行迭代以找到相似的单词。

标签: python list word letter


【解决方案1】:

首先,安装:pip install -U python-Levenshtein

然后:

import Levenshtein
for a,b in zip( english, spanish ) :
    if Levenshtein.distance( a, b ) < 3 :    # close enough
        print 'similar words:', a, b

这里解释了levenshtein 的工作原理:https://en.wikipedia.org/wiki/Levenshtein_distance -- 如果您更喜欢不同的相似度指标,您也可以这样做,但这个非常好,过去对我来说效果很好。

Levenshtein 也可以计算 ratio(...)

    ratio(string1, string2)

    The similarity is a number between 0 and 1, it's usually equal or
    somewhat higher than difflib.SequenceMatcher.ratio(), because it's
    based on real minimal edit distance.

【讨论】:

  • 对于较新版本的python,您可能需要使用 print('similar words:',a,b)
【解决方案2】:

您可以使用difflib 并检查它们是否与ratio 相似,

$ cat similar.py

from difflib import SequenceMatcher

english_list = ['prejudicial','dire','malignant','appalling', 'ratify']
spanish_list =['perjudicial', 'grave', 'maligno', 'atroz','ratificar']

def similarity(a, b):
    return SequenceMatcher(None, a, b).ratio()


print('English', 'Spanish')
for eng, span in zip(english_list, spanish_list):
        if similarity(eng, span) >= 0.5:
            print(eng, span)

输出:

$ python3 similar.py
English Spanish
prejudicial perjudicial
malignant maligno
ratify ratificar

作为旁注,根据您的用例,您应该检查difflib Vs levenshtein

【讨论】:

    猜你喜欢
    • 2014-12-05
    • 2013-05-13
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 2011-10-13
    • 1970-01-01
    相关资源
    最近更新 更多