《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 (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 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))
时间: 2024-12-13 22:51:28

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

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

T4:使用state_union预料库,访问<国情咨文报告>文本.统计women,men,people随时间推移变化情况 # # from nltk.corpus import brown as bn # # from nltk.corpus import state_union as su # # cfd=nltk.ConditionalFreqDist((target,fileid[:4]) for fileid in su.fileids() for w in su.words(file

Python核心编程(第二版) 第二章习题答案 未完待续

2-2.程序输出.阅读下面的Python脚本.#!/usr/bin/env python1 + 2 * 4(a)你认为这段脚本是用来做什么的?(b)你认为这段脚本会输出什么?(c)输入以上代码,并保存为脚本,然后运行它,它所做的与你的预期一样吗?为什么一样/不一样?(d)这段代码单独执行和在交互解释器中执行有何不同?试一下,然后写出结果.(e)如何改进这个脚本,以便它能和你想象的一样工作?答:(a)这段脚本是用来计算表达式的值(b)脚本会输出9(c)保存为脚本,运行后没有输出.和自己预期不一样.

Python编程快速上手-让繁琐工作自动化-第二章习题及其答案

Python编程快速上手-让繁琐工作自动化-第二章习题及其答案 1.布尔数据类型的两个值是什么?如何拼写? 答:True和False,使用大写的T和大写的F,其他字母是小写. 2.3个布尔操作符是什么? 答:and.or和not. 3.写出每个布尔操作符的真值表(也就是操作数的每种可能组合,以及操作的结果) 答:and:True and True  -> True True and False -> FalseFalse and True -> FalseFasle and False

Introdution to 3D Game Programming With DirectX11 第11章 习题解答

11.1 这道题要注意使用了line strip,由于曾经一直用triangle list,所以在几何渲染的时候easy算错定点描绘的顺序. 贴一些代码,大概就能把这个问题解释清楚了,由于框架还不是特别熟,所以是在原有样例的基础上建立的自己的代码 void TreeBillboardApp::BuildCircleBuffers() { // //Create the vertex buffer // std::vector<Vertex::Basic32> vertices(32); for

陶哲轩 实分析 第二章第二小节 习题解答

陶哲轩 实分析 第二小节 习题 最近从网上下载到了陶哲轩写的实分析,确实是本好书.不过所有的习题都没有给出答案.我试着自己做一遍习题,整理一份习题解答. 2.2.1 证明自然数加法是结合的 (a + b) + c = a + (b + c) 数学归纳法 a=0 时, 左边: (0+b)+c=b+c 右边: 0+(b+c)=b+c 左边 = 右边 假设当 a=n 时,(n+b)+c=n+(b+c) 成立 则,当 a=n++ 时 ((n++)+b)+c=((n+b)++)+c=((n+b)+c)++

我要翻译《Think Python》- 004 第二章 变量, 表达式和语句

PDF源文件地址 :  http://www.greenteapress.com/thinkpython/thinkpython.pdf [自述:这一章内容不多,但是由于时间关系,翻译完成这一章也花了我一周的时间,跟我预想的进度相比已经落后了,得加油了,要不然翻译完整本书就要到猴年马月了.目前离翻译完成还有17章!!!] 第二章 变量, 表达式和语法 2.1 值和类型 值是程序工作的基本要素,如字符串“Hello,World!”或数字1.2等等. 这些值属于不同类型:2是一个整数,而“Hello

Python课本第2章习题参考答案(第二版)(Python绘制蟒蛇,中美汇率转换,等边三角形,叠加等边三角形,无角正方形,六角形,正方形螺线)

2.1   实例1的修改,采用eval(input(<提示内容>))替换现有输入部分,并使输出的温度值为整数. 2.2   汇率兑换程序.按照温度转换程序的设计思路,按照1美元=6人民币汇率编写一个美元和人民币的双向兑换程序. 2.3   实例2的修改.改造实例代码2.1,绘制一条彩色的蟒蛇,即在绘制Python蟒蛇的每个小段时,画笔的绘制颜色会发生变化. 提示:将画笔颜色控制函数放到蟒蛇绘制函数附近. 2.4   等边三角形的绘制.使用turtle库中的turtle.fd()函数和turtl

python核心编程第二版 第二章练习题解答 未完待续

有人可能会想,连2-1和2-2这样的题目都回答,够无聊的啊.因为现在处于并长期处于成为大师的第一阶段------守的阶段 2-1 >>> a= '123' >>> a '123' >>> print (a) 123 a是字符串123,如果格式化输出有问题报如下错误: >>> print ('a is %d'% a) Traceback (most recent call last): File "<stdin>&

python核心编程第二版第二章习题

2.1 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11 def test_sum(): tup=("1","2","3","6","5") sum=0 for i in tup: sum=float(i)+sum return sum def test11(): while True: string=raw_input(">>") if strin