《Python自然语言处理》第二章 习题解答 练习6

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《Python自然语言处理》第二章 习题解答 练习6相关的知识,希望对你有一定的参考价值。

问题描述:在比较词表的讨论中,创建一个对象叫做translate,通过它你可以使用德语和意大利语词汇查找对应的英语词汇。这种方法可能会出现什么问题,你能提出一个办法来避免这个问题吗?

书上的做法是通过entries()方法来指定一个语言链表来访问多语言中的同源词,再把它转换成一个简单的词典。代码如下:

1 from nltk.corpus import swadesh
2 swadesh.fileids()
3 it2en = swadesh.entries([it, en])
4 de2en = swadesh.entries([de, en])
5 translate = dict(it2en)
6 translate.update(dict(de2en))
7 translate[Hund]

然而这个方法有个问题,原语言链表中有多对多关系的词,如it2en中的:

1 (utu, Lei, uyou (singular), thou)
2 (ului, egli, uhe)
3 (uloro, essi, uthey)
4 (uqui, qua, uhere)
5 (uudire, sentire, uhear)
6 (uodorare, annusare, usmell)
7 (udividere, separare, usplit)
8 (uaguzzo, affilato, usharp)
9 (uasciutto, secco, udry)

当输入translate[‘tu‘]时并不会正确显示you (singular), thou,而是会报错KeyError: ‘tu‘:

1 >>> translate[tu]
2 Traceback (most recent call last):
3   File "<stdin>", line 1, in <module>
4 KeyError: tu

解决思路:

遍历语言链表,当检测到有多对多关系时,将该元素进行处理后再加入原语言链表。

代码:

 1 from nltk.corpus import swadesh
 2 swadesh.fileids()
 3 it2en = swadesh.entries([it, en])
 4 de2en = swadesh.entries([de, en])
 5 
 6 for key in it2en:
 7     if , in key[0]:
 8         words = key[0].split(, )
 9         for eachWord in words:
10             newWord = (eachWord, key[1])
11             it2en.append(newWord)
12 
13 for key in de2en:
14     if , in key[0]:
15         words = key[0].split(, )
16         for eachWord in words:
17             newWord = (eachWord, key[1])
18             de2en.append(newWord)
19 
20 translate = dict(it2en)
21 translate.update(dict(de2en))

 


以上是关于《Python自然语言处理》第二章 习题解答 练习6的主要内容,如果未能解决你的问题,请参考以下文章

python 自然语言处理第二章 部分习题

PTA的Python练习题(二十)

单片机单片机基本原理练习题1

分享《自然语言处理理论与实战》PDF及代码+唐聃+《深入浅出Python机器学习》PDF及代码+段小手+《深度学习实践:计算机视觉》PDF+缪鹏+《最优化理论与算法第2版》高清PDF+习题解答PDF+

python练习题

python练习题