问题描述:在比较词表的讨论中,创建一个对象叫做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 (u'tu, Lei', u'you (singular), thou')
2 (u'lui, egli', u'he')
3 (u'loro, essi', u'they')
4 (u'qui, qua', u'here')
5 (u'udire, sentire', u'hear')
6 (u'odorare, annusare', u'smell')
7 (u'dividere, separare', u'split')
8 (u'aguzzo, affilato', u'sharp')
9 (u'asciutto, secco', u'dry')

当输入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 # list[tuple(str, str), ...]
 7 for it, en in it2en:
 8     if ',' in it:
 9         words = it.split(', ')
10         for eachWord in words:
11             newWord = (eachWord, en)
12             it2en.append(newWord)
13
14 for de, en in it2en:
15     if ',' in de:
16         words = de.split(', ')
17         for eachWord in words:
18             newWord = (eachWord, en)
19             de2en.append(newWord)
20
21 translate = dict(it2en)
22 translate.update(dict(de2en))

转载于:https://www.cnblogs.com/yezuoxian/p/6713705.html

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

  1. 【虎书】Fundamentals of Computer Graphics(Fourth Edition)第二章习题解答

    [虎书]Fundamentals of Computer Graphics(Fourth Edition)第二章章末习题解答 Exercises Exercise 1: Cardinality of ...

  2. DIP第二章习题解答

    数字图像处理 第二章课后作业 下载地址:数字图像处理第二章课后作业.pdf_数字图像处理第二章完整答案,数字图像处理第二章课后答案-图像处理文档类资源-CSDN下载https://download.c ...

  3. python自然语言处理 第一章习题

    1. 尝试使用Python解释器作为一个计算器,输入表达式,如:12/(4+1) >>> 12/(4+1) 2.4 2. 26 个字母可以组成 26 的 10 次方或者 26**10 ...

  4. 解释下列术语堆栈型计算机,计算机系统结构 第二章(习题解答)

    1. 数据类型.数据表示和数据结构之间是什么关系?在设计一个计算机系统 时,确定数据表示的原则主要有哪几个? 答: 略 2. 假设有A和B两种不同类型的处理机,A处理机中的数据不带标志位,其 指令字长 ...

  5. 用python编程、假设一年期定期利率_第二章-习题答案

    第二章习题 1 . 写一个算法(流程图和 python 程序) :输入三个数,输出其最 大者. numA=3 numB=4 numC=5 if numA <= numB: if numC pri ...

  6. 计算机组成原理第二章测试题,计算机组成原理第二章习题答案.doc

    计算机组成原理第二章习题答案 第2章?习题及解答 2-2?? 将下列十进制表示成二进制浮点规格化的数(尾数取12位,包括一位符号位:阶取4位,包括一位符号位),并写出它的原码.反码.补码三和阶移尾补四 ...

  7. 统计学习导论:基于R应用——第二章习题

    目前在看统计学习导论:基于R应用,觉得这本书非常适合入门,打算把课后习题全部做一遍,记录在此博客中. 第二章习题 1. (a) 当样本量n非常大,预测变量数p很小时,这样容易欠拟合,所以一个光滑度更高 ...

  8. java第二章选择题_Java第二章习题讲解(2)

    第二章习题讲解(1) 3.阅读或调试程序 (1) 上机运行下列程序,注意观察输出的结果.Java public class E{ public static void main(String args ...

  9. 【Python 自然语言处理 第二版】读书笔记1:语言处理与Python

    文章目录 前言 语言处理与Python 一.语言计算:文本和单词 1.NLTK入门 (1)安装(nltk.nltk.book) (2)搜索文本 (3)词汇计数 2.列表与字符串 (1)列表操作 (2) ...

最新文章

  1. 还找不到数据异常原因?这份教程赶快拿走
  2. 英雄联盟更新服务器维护,lol更新维护
  3. 拉5000万存款,银行客户经理能拿40万奖金?
  4. 以太坊白皮书_以太坊发展历程
  5. ajax保存避免重复提交,ajax 实现防止重复提交
  6. Javascript -- 二叉树(查找删除功能实现)
  7. 第一个简单APP设计图
  8. 【Spark调优】聚合操作数据倾斜解决方案
  9. 大型网站架构系列:负载均衡详解
  10. 记录:zlog交叉编译出aarch64的libzlog.a
  11. global mapper导出影像范围
  12. 医疗器械app软件开发功能明细
  13. 最新主流 Markdown 编辑器推荐
  14. kindle看pdf不清楚_不要再纠结pdf在kindle上的显示问题了,简单教程,拿去!不要太谢我。...
  15. IDEA 一直Updating indexes问题解决
  16. shopnc route.php,shopnc商城专题页的伪静态支持
  17. 浏览器禁用cookie后session还能用吗?cookie与session区别
  18. RPC VS REST
  19. Java利用Ant包进行解压缩文件
  20. 【笔记】Yolo_v3 损失:正例,计算bbox与GT之间的位置和大小差异(MSE),计算80个类别维度与target的one-hot向量间的交叉熵损失;正例和负例,加权求和置信度与GT之间的交叉熵

热门文章

  1. SDOI2019R1游记
  2. 中国第三位世界拳王诞生 徐灿夺得WBA羽量级金腰带
  3. 是什么构成了“人工智能”热潮?
  4. Vim批量注释、替换和缩进
  5. 通过修改PHP源代码解决Nginx下WebShell跨站的问题
  6. 架构探险笔记11-与Servlet API解耦
  7. Android Dialog Activity
  8. 迎春舞会之三人组舞 vijos1061 动态规划
  9. POJ - 2828
  10. css之多行文本输出