代码之家  ›  专栏  ›  技术社区  ›  psihodelia

如何在两种不同的语言中找到所有具有相同外观的单词?

  •  0
  • psihodelia  · 技术社区  · 14 年前

    俄语字母表包括许多与英语字母表相同的字母。以下是常用字母列表: L='acekopuxy'

    现在,给出两个大名单 ,每个单词的格式为[单词A,单词B,…],其中每个单词是小写单词,我要创建一个列表 ,其中应仅包含拼写相同的单词 . 例如,必须有一个单词“cop” C类 以及 .

    有什么多项式方法可以做到吗?

    lists,LE表示英语字母,LR表示俄语字母,但它们的字母外观相同:

    LE='acekopuxy'
    LR='асекориху'
    
    4 回复  |  直到 14 年前
        1
  •  3
  •   Luper Rouch François Lagunas    14 年前

    您可以使用集合:

    english_set = set(E)
    russian_set = set(R)
    common_words = english_set.intersection(russian_set)
    

    我不确定我的编码部分是否正确,但如果这意味着看起来相似的字母实际上是不同的字节,那么你可以在做交集之前用英文字母替换这些字母,从而准备好俄语列表。

        2
  •  1
  •   Boldewyn    14 年前

    var RE_map = (
      (u'c', u'\u0441'),
      # ...and so on
    )
    

    然后,将所有单词从R转换为它们的E表示:

    for ec, rc in RE_map:
        string = string.replace(rc, ec)
    

    最后检查字符串是否在 E :

    if string in E:
        print "The word exists of characters similar in Latin and Cyrillic."
    
        3
  •  1
  •   Tim Pietzcker    14 年前

    您可以为此使用正则表达式:

    ^[acekopuxy]+$
    

    将匹配仅包含这些字符的单词。

    import re
    regex = re.compile(r"^[acekopuxy]+$", re.I)
    output = []
    for word in mylist:
        if regex.match(word):
            output.append(word)
    

    您需要使用正确的编码对两个列表执行此操作。这意味着对于俄语列表,您需要使用等效的字符,比如 ^[\u0441\u1234...]$ .

    然后,如果要查找“外观相同”的单词,可以使用转换表将列表中的一个单词转换为另一个列表的格式,然后将列表转换为集合,并检查它们的交集。

        4
  •  1
  •   Fred Foo    14 年前
    Eset = set(E)
    C = [w for w in R if w.replace(LR,LE) in Eset]
    

    不确定我是否正确理解了这个问题,但是假设哈希计算良好,那么这个函数在( n个