繁体   English   中英

如何找到用两种不同语言出现的所有相同单词?

[英]How to find all words that have the same appearence in two different languages?

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

现在,给定两个巨大的列表RE ,每个列表的形式为[word_A,word_B,...],其中每个word_N是一个小写单词,我想创建一个列表C ,其中应仅包含具有相同单词的那些单词ER中的拼写。 例如,单词“ cop”必须在C中 ,因为它既在列表R中也在E中

有什么多项式方法吗?

PS:一个重要的注意事项:由于字符编码不同,所以有两个L列表,LE代表英语字母,LR代表俄语,但是它们的字母外观是相同的:

LE='acekopuxy'
LR='асекориху'

您可以为此使用集合:

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

我不确定我是否正确地使用了编码部分,但是如果这意味着看起来相似的字母实际上是不同的字节,则可以例如在进行交集之前,用这些字母替换为其英文对应物来准备俄语列表。

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

^[acekopuxy]+$

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

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

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

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

Eset = set(E)
C = [w for w in R if w.replace(LR,LE) in Eset]

不知道我是否正确理解了这个问题,但是假设散列良好,则在O( n )中运行。

您需要自己告诉程序哪些字符相似。 由于它们都是不同的Unicode代码点,因此您将必须具有以下映射:

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."

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM