Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果两个单词变体没有';不能按字母顺序匹配_Python_Nlp_Word List - Fatal编程技术网

Python 如果两个单词变体没有';不能按字母顺序匹配

Python 如果两个单词变体没有';不能按字母顺序匹配,python,nlp,word-list,Python,Nlp,Word List,我正在和我的大学一起做一个NLP项目,收集冰岛语单词的数据,这些单词都拼写为I和y(在冰岛语fyi中发音相同),其中变体都是实际单词,但意思并不相同。这方面的例子包括leyti(时间上的近似值)和leiti(长满草的小山),或者kirkja(教堂)和kyrkja(窒息)。我有一个200万字的数据集。我已经收集了两个单词列表,其中一个包含拼写为y的单词,另一个包含拼写为I的相同单词(尽管它们似乎并不完全匹配,因为y列表稍长,但这是一个单独的问题)。我的问题是,我想以像leyti-leiti、kyr

我正在和我的大学一起做一个NLP项目,收集冰岛语单词的数据,这些单词都拼写为I和y(在冰岛语fyi中发音相同),其中变体都是实际单词,但意思并不相同。这方面的例子包括leyti(时间上的近似值)和leiti(长满草的小山),或者kirkja(教堂)和kyrkja(窒息)。我有一个200万字的数据集。我已经收集了两个单词列表,其中一个包含拼写为y的单词,另一个包含拼写为I的相同单词(尽管它们似乎并不完全匹配,因为y列表稍长,但这是一个单独的问题)。我的问题是,我想以像leyti-leiti、kyrkja-kirkja等成对的单词结束。但是,由于y在字母表中的位置比我晚得多,所以仅仅对列表进行排序并以这种方式对它们进行配对是不好的。我还试着在检查前几个字母时压缩列表,看看是否能找到匹配的字母,但这会遗漏所有以y或I作为第一个字母的单词。您对我如何实现这一点有什么建议吗?

试试这样的方法:

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  


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

我建议您使用一种基于的方法来识别允许某些变体的词对。特别是对于您上面描述的问题,我建议使用“”。该方法允许在显示特定字符对(例如y和i)之间变化的词对之间给出更高的相似性分数

所有这些方法都在中实现。
你也可以看一下。希望这能有所帮助。

所以这就完成了我的任务,我想这是一个简单的解决方案,不是很好的解决方案,但它很有效:

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

您可以简单地将每个
y
更改为
i
,并创建1对1的匹配。。。它将创建一些不存在的单词,但您也可以保留它们的原始版本。这是我已经做过的,但我想确保所有单词确实存在于我的数据集中。因此,我无论如何都需要检查这些对,看看它们是否与实际单词匹配。但也许这比其他方法更容易实现。非常感谢,我将查看这些链接。太好了!别忘了投票并接受答案:)