[英]How to find all words that have the same appearence in two different languages?
俄语字母包括许多与英语字母相同的字母。 以下是常用字母的列表: L='acekopuxy'
现在,给定两个巨大的列表R和E ,每个列表的形式为[word_A,word_B,...],其中每个word_N是一个小写单词,我想创建一个列表C ,其中应仅包含具有相同单词的那些单词E和R中的拼写。 例如,单词“ 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.