如果两个字母的变体在字母上不匹配,则彼此匹配

时间:2019-09-23 12:33:30

标签: python nlp word-list

我正在与我的大学一起进行NLP项目,收集有关冰岛语中同时带有i和ay拼写的单词的数据(在冰岛文fyi中听起来相同),其中变体均为实际单词,但并不意味着同样的事情。这样的示例包括leyti(时间的近似值)和leiti(草山)或kirkja(教堂)和kyrkja(扼流圈)。我有一个200万个单词的数据集。我已经收集了两个单词表,其中一个包含用y拼写的单词,一个包含用ai拼写的单词(尽管它们似乎并不完全匹配,因为y-list更长,但这是一个单独的单词)问题)。我的问题是我想以leyti-leiti,kyrkja-kirkja等单词结尾。但是,由于y在字母中的位置比我晚得多,因此仅对列表进行排序并以这种方式将它们配对是不好的。我还尝试在检查前几个字母的同时压缩列表,以查看是否可以找到匹配项,但这排除了所有以y或i作为第一个字母的单词。您对我将如何实施此建议吗?

3 个答案:

答案 0 :(得分:0)

尝试这样的事情:

s = "trydfydfgfay"
l = list(s)
candidateWords = []
for idx, c in enumerate(l):
    if c=='y':
        newList = l.copy()
        newList[idx] = "i"
        candidateWord = "".join(newList)
        candidateWords.append(candidateWord)
print(candidateWords)
#['tridfydfgfay', 'trydfidfgfay', 'trydfydfgfai']
#look up these words to see if they are real words  

答案 1 :(得分:0)

我不认为这是编程挑战,但看起来更像是NLP挑战本身。拼写变化通常是预处理过程中会遇到的障碍。

我建议您使用基于Edit-distance的方法来识别允许某些变体的单词对。特别针对您上面描述的那种问题,我建议您使用“ Jaro Winkler Distance”。这种方法可以使单词对之间的相似度更高,从而显示特定字符​​对(例如y和i)之间的差异。

所有这些方法都在Jellyfish library中实现。 您也可以看看fuzzywuzzy package。希望这会有所帮助。

答案 2 :(得分:0)

这样就完成了我的任务,我想这是一个简单的,并非如此漂亮的解决方案,但是它可以起作用:

wordlist = open("data.txt", "r", encoding='utf-8')
y_words = open("y_wordlist.txt", "w+", encoding='utf-8')
all_words = []
y_words = []

for word in wordlist:
    word = word.lower()
    all_words.append(word)

for word in all_words:
    if "y" in word:
        y_words.append(word)

word_dict = {}

for word in y_words:
    newwith1y = word.replace("y", "i",1)
    newwith2y = word.replace("y", "i",2)
    newyback = word[::-1].replace("y", "i",1)
    newyback = newyback[::-1]
    word_dict[word] = newwith1y
    word_dict[word] = newwith2y
    word_dict[word] = newyback

for key, value in word_dict.items():
    if value in all_words:
        y_wordlist.write(key)
        y_wordlist.write(" - ")
        y_wordlist.write(value)
        y_wordlist.write("\n")