Skip to the content.

多音字消歧

EN version

open source

1. 任务

在中文TTS(Text-to-speech,文本转语音)系统中,一个关键的问题是为多音字确定读音(通常这个任务称为polyphone disambiguation,即多音字消歧)。

在某些情况下,一个字的读音可以在词或者短语语境内确定,比如,’为’可以读’wei2’或者’wei4’,在’以为’中读’wei2’,在’为人民服务’中读’wei4’。但是,NLP难就难在,这种情况通常不成立。问题有二:

第一,分词错误

 '中国共产党以为(wei4)人民服务为宗旨' --> (jieba分词) '中国/共产党/以为/人民/服务/为/宗旨'

第二,即使分词正确,一些词在上下文中也具有不同含义

 '张朝(chao2)阳/在/北京/朝(chao2)阳/公园/迎着/朝(zhao1)阳/奔跑'
 '我/在/春天/播种(zhong4)/希望' vs '春天/播种(zhong3)/, /秋天/收获'
 '坐/稳当/(dang5)/了/,/我们/出发' vs '他/在/历次/世界/排名赛/中/稳当(dang1)/第一'

其它一些经典case:

 一把把把把住了
 人要是行,干一行行一行,一行行,行行行。行行行,干哪行都行。要是不行,干一行不行一行,一行不行行行不行。行行不行,干哪行都不行 。要想行行行,首先一行行。成为行业内的内行,行行成内行
 南京市长江大桥正式通车了

2. 中文多音字语料构建

Chinese Polyphone with Pinyin (CPP), 见g2pM,应该是当前唯一公开的中文多音字数据集,包含了训练、验证和测试集的切分。然而其中的错误非常多,末尾的附录会详细说明。这里介绍我如何构建语料:

1) 首先搞清楚,中文有多少个常用多音字。g2pM中, ./g2pM/digest_cedict.pkl记录了汉字的读音,但是其中有一些多音字(’丌’, ‘乀’等)不常用,也有字的读音出现缺少、增多或者错误,我手动修改了多音字读音(注意,非多音字的字的读音未经检查),原有791个多音字,经过修改后有612个。(此外,./g2pM/class2idx.pkl文件其实没什么用。)

2) 搜集拼音下的组词。phrase-pinyin-data中,./large-pinyin.txt搜集了大量的词语和对应的读音。经过处理,可以得到多音字的不同读音能组成什么词语。例子如下:

   行 xíng	一一行行/一一行行/一介行人/一介行李/一意孤行/ ……
      háng	一分行情一分货/一百二十行/一目五行/一目十行/一目数行/ ……
      xí	便把令来行
      hàng	树行子
      xing	言信行直
      héng	道行

可以看到,这份数据很脏。幸运的是'行'在`./g2pM/digest_cedict.pkl`中的读音是对的,只有'xing2'和'hang2'。利用它对上面的词表进行过滤,转换成为以词为索引的格式,以下称为**PCP表**(phrase-character-pinyin)。下面举PCP表格中的几个例子,第一行是一个多音字仅出现一次的例子,第二、三行是多音字重复出现但是读音不变的例子,读音列表中仅有一个元素,第四、五行是多音字重复出现且读音改变的例子,读音列表中的拼音与出现的次数相同、顺序相应:

   清浄无为	{"为": "wei2"}
   痛痛切切	{"切": \["qie4"\]}
   调调	{"调": \["diao4"\]}
   走了和尚走不了寺	{"了": \["le", "liao3"\]}
   好善恶恶	{"恶": \["wu4", "e4"\]}

3) 使用权威字典检查PCP表。MCD7是现代汉语词典(第七版)的线上版本(其中包含部分错误,我强烈建议大家买一本纸质版放在手边),可以用于矫正PCP表格的错误。具体的实现过程是通过遍历比较,捞回读音不一致的词语,然后人工审核。例如,’部分’标注的是’bu4 fen4’,但是正确的’bu4 fen5’。(备注:第2)步使用MCD7做也是可以的,但是上面的那个数据除了词语之外,包含了更多口语化和短语)

4) 爬取语料并清洗。对PCP表中的每个词语,爬取百度百科的词条并清洗语料,爬取过程见附录。清洗

3. 语料对比

1) 数量

2) 覆盖面

3) 平衡性

4. 模型性能

1) 测试标准

因为汉字使用频率是一个长尾分布,且在一些多音字中某个读音占据绝对主导,所以,简单使用准确率来做评价是不客观的。借鉴g2pW代码,除了准确率之外,我采用了其它两种评价方式:

  • 按字平均的准确率(Acc. avg.by.p),即对每个多音字统计正确率,然后做平均
  • 按字的每个音平均的准确率(Acc. avg.by.pp),即对每个多音字的每个读音统计正确率,然后做平均

2) 模型

模型使用ernie3-base向量、分词向量、词性向量的拼接,然后直接送入softmax层。

  • 分词向量
  • 词性向量

预训练语言模型采用1e-5的学习率,其它参数采用5e-5的学习率,对所有数据训练10个epoch。

3) 性能对比

以下性能是在CPP测试集上测试得到的。注意,CPP数据集中,有一些多音字的样本(包括训练、验证和测试)只覆盖了它的一个读音,这会对模型的实际性能造成高估。因此,在计算性能的时候,应该出具两个版本,即在全测试集(下面记为CPP-test)的结果,和排除了这些样本(下面记为CPP-test-small)的结果。

  • 仅使用CPP训练集和验证集

    CPP-test Acc Acc avg.by.p Acc avg.by.pp
    g2pM      
    g2pW      
    ours      
    CPP-test-small Acc Acc avg.by.p Acc avg.by.pp
    g2pM      
    g2pW      
    ours      
  • 使用CPP训练集+我的数据作训练,CPP验证集作挑选

    CPP-test Acc Acc avg.by.p Acc avg.by.pp
    g2pM      
    g2pW      
    ours      
    CPP-test-small Acc Acc avg.by.p Acc avg.by.pp
    g2pM      
    g2pW      
    ours      

备注:g2pW使用词性预测作为辅助任务,但是其词性标签错得非常多,我目测并不是它论文中说的人力标注,而是机器伪标签,其标签体系目测是:。在上面的实验中,我使用了它的标签。但是在这里,需要和我的数据统一使用一套词性标签,而我不知道是什么工具采用这一套。所以我只能使用jieba分词的标签做新的伪标签。这并不影响对比的公平性。

5. 未来工作

谨记我们的研究目的,不是停留在为多音字指定一个拼音,而是支撑TTS应用。因此还有至少如下问题需要解决

a. 一个分句中多音字的联合建模

一个分句中如果有多个多音字,按照排列组合有很多种可能性,但是实际上,由于语义之间的相互约束,某些可能性是不必考虑的。比如“强”“行”都是多音字,但是“强行”只能发音为“qiang2 xing2”,“教”“会”都是多音字,但是“教会”只能发音为“jiao4 hui4”或者“jiao1 hui4”。所以,下一步可以构建一个单句包含多个多音字的语料,训练一个模型捕捉其潜在关系。

b. 轻声

轻声是一个复杂的语言现象。简单来说,很多字在使用中都可以发轻声。

c. 方言

TTS合成方言可以考虑两个路线,一个是基于规范音素合成带地方特色的音色,一个是在文本转音素的时候就出地方特色。如果采用后者,我们就要扩充词典,使其包含一些“错误的”读音。例如,在东北方言,’那些’发音为’nei4 xie1’。

d. 古汉语

现代汉语有很多成语和常用的诗词都来自古汉语。古汉语中,一些现代汉语中不作为多音字使用的字有多个读音,比如 ‘雨(yu3)’ 在现代汉语只有读音,但是在古汉语也能读’yu4’(作动词用),如在’天雨雪’中读’yu4’。

附录

1. CPP数据集的错误更正

1) 非多音字的全部删除,包括如下汉字:

- 追(例句:羽、刘邦识于微时,因反秦而结为知己,惺惺相识,刘邦▁追▁随善战的项羽,共事楚怀王熊心,一同出生入死。)
- 歪(例句:但不包括▁歪▁球和废球。)    
- 沉(例句:对没有仆人的工人家庭女性而言,家务是▁沉▁重的负担。)    
- 隐(例句:北京▁隐▁子草(学名:)为禾本科隐子草属下的一个种。)   
- 页(例句:根据开发技术的不同,网▁页▁可分为:)
- 埏(例句:山东布政使储▁埏▁、张海等急向朝廷报警。标注错为yan2,并以为是多音字,事实上,该字只有shan1一个读音)      
- 峇(例句:▁峇▁哥国家公园是“砂拉越观察长鼻猴的最佳去处”。)
- 操
- 渠
- 傀
- 佚
- 棹
- 哏
- 旄
- 桁
- 溇
- 熜
- 跄
- 咥
- 嬛
- 浜
- 王
- 唯
- 杠
- 挟
- 女
- 弟
- 妻
- 食
- 衣
- 上
- 奄
- 沈
- 巂(现代汉语不再收录,现代汉语规范写法为:嶲,只有xi1一个读音,不是多音字)
- 閤(现代汉语不再收录)
- 豊(现代汉语不再收录)

2) test中错误标注共70句,列举如下:

行数 句子 新标签 原标签
67 在康熙十八年重修之后的数百年间,各方还曾经▁数▁次扩建或修复柔远驿。 shu4 shuo4
439 李广(),▁会▁稽郡(今浙江省绍兴市)人,中国南北朝后梁军事人物。 kuai4 hui4
468 传统动画的制作手段在如今已经被▁更▁为现代的扫描,手写板,或者电脑技术取代。 geng4 geng1
496 天神遗以▁好▁女,浮屠日:“此但革囊盛血。 hao3 hao4
642 在2000项研究中,有40%遭受▁过▁歧视的受访者认为他们失去了受聘和晋升机会。 guo5 guo4
650 曾在多个电视节目做嘉宾,拍过多个广告、当▁过▁多本杂志的模特儿,也演出过多部微电影。 guo5 guo4
1279 2010年中国大陆人民文学出版社出版《▁柏▁杨全集》,全25册。 bo2 bai3
1459 著有《泂山集》、《泂山九潭志》和《▁葛▁衣集》,今仅存《葛衣集》。 ge2 ge3
2062 这款游戏开放了关▁卡▁下载和更新,以及开放用户制作的关卡分享功能。 qia3 ka3
2510 以前这类▁曲▁面的表示只存在于设计者创建的实体模型。 qu1 qu3
2515 京沪铁路自济南、泰安南下,经磁窑由▁曲▁阜入境,转西南至兖州,后转东南经邹城出境,再经滕州、枣庄出省。 qu1 qu3
2544 伊万斯擅长彩色印刷,他制作出的图画十分精美,成为彩印技术风▁靡▁19世纪中期的一个重要原因。 mi3 mi2
2824 分析化学中,基准物质是定量分析的参考物质,通过准确称▁量▁可直接确定其物种物质的量。 liang2 liang4
3720 相比之下,▁钻▁取是一种允许用户浏览详细信息的技术。 zuan1 zuan4
3851 同年7月开始,他以痛、腹泻、腰痛、发热等理由请▁假▁。 jia4 jia3
4115 ▁糊▁汤粉,是一种将鱼汤熬成微稠糊状,加入米粉的武汉特色小吃。 hu4 hu2
4486 又据报,长沙外▁藉▁传教师语外记者及武官,敌人二十七日入长沙约两万人,留四日退去。 -* ji2
4631 巴比妥是一种无▁臭▁,微苦的白色晶状粉末。 xiu4 chou4
4949 她病死后,也只是减其仪等,并未▁削▁去皇后名号。 xue1 xiao1
4960 虢国被晋国灭亡后,虢公丑出▁奔▁京师,又辗转来到苏国,最后客死于此。 ben1 ben4
5028 据记载管仲的论封▁禅▁:古代封泰山、禅梁父的帝王有72代,而管仲本人记得有十二个。 shan4 chan2
5043 当年冬天,唐玄宗东巡封▁禅▁泰山,李邵固到达玄宗行在之所,跟随到泰山之下。 shan4 chan2
5053 朱温想登上皇位,蒋玄晖、宰相柳璨认为应该仿效汉魏以来的规矩,先封大国,加九锡,然后受▁禅▁。 shan4 chan2
5354 楼道地面用水▁磨▁石铺地,阅览室使用软木地板,其余部分的地面采用树胶块。 mo2 mo4
5356 磨砂工艺的方法就是在普通工业塑料壳上喷上▁磨▁砂漆。 mo2 mo4
5361 ▁薄▁暮游空影,浮生出太荒。 bo2 bao2
5362 这种▁薄▁膜是易燃的,而且燃烧迅速,通常不能熄灭,因为它们即使在水下也能燃烧。 bao2 bo2
5374 压力传感器阵列还有▁薄▁膜形式。 bao2 bo2
5391 韦爱的儿子-{韦乾向}-,官至骁▁骑▁将军、征北长史、汝阴郡锺离郡二郡太守。 qi2 ji4
5673 时东晋初建,法禁宽弛,豪族多▁挟▁藏户口,让他们私下依附自己。 xie2 jia1
5724 完者▁帖▁木儿,元顺帝时中书右丞相。 tie1 tie3
5725 洪武二十四年(1392年)元降将月鲁▁帖▁木儿在建昌起兵,蓝玉擒月鲁帖木儿父子,封太子太傅。 tie1 tie3
5728 晃火▁帖▁木儿在元仁宗延祐五年(1318年),封嘉王,赐兽纽金印。 tie1 tie3
5729 1272年在位不足一年的秃里▁帖▁木儿去世,海都把王位给予八刺之子都哇。 tie1 tie3
5730 但元宁宗仅在位不到两个月即去世,不久后燕▁帖▁木儿也去世。 tie1 tie3
5732 1388年蒙古大汗托古思▁帖▁木儿在捕鱼儿海(今蒙古贝尔湖)被明蓝玉的军队击败西走。 tie1 tie3
5735 ▁帖▁木儿不花 (答答里带人) tie1 tie3
5736 该馆藏品以书画、碑▁帖▁为特色,兼收陶瓷、金石、钢、玉等等。 tie4 tie3
5737 ▁帖▁木儿·灭里之子,他的兄长帖木儿·忽格鲁特死后,沙迪别在也迪古支持下1399年即位。 tie1 tie3
5888 经过▁炸▁制后的伊府面,可以保存半个多月。 zha2 zha4
5919 她精神高▁涨▁,仪态迷人。 zhang3 zhang4
6174 二十世纪八十年代,皮糖张糖▁坊▁在第三代传人张学礼先生的经营下重新得到了发展。 fang1 fang2
6175 帕尔莱勒作▁坊▁成员、帕尔莱勒家族在中欧各地设计了许多教堂和建筑。 fang1 fang2
7147 王凝可能被继续追赠为□□□师(▁阙▁字) que1 que4
7623 ▁颉▁干迦斯在忠贞可汗、奉诚可汗两朝任大将大相,执掌朝权。 jie2 xie2
7624 ”夷男很高兴,协助唐太宗灭亡突厥▁颉▁利可汗。 jie2 xie2
7626 ▁颉▁利败走后,投奔位于灵州西北的苏尼失,计划投奔吐谷浑。 jie2 xie2
7629 其时胡适开设的“中国哲学史”课程颇具影响,傅斯年、顾▁颉▁刚以其系统而有条理,甚为认可。 jie2 xie2
7882 一般口罩型口塞也有多条固定用的带子,但塞入物的部位是一块皮制的口罩,口罩的内部可能▁粘▁接有塞入物。 zhan1 nian2
8040 其中的一名妇女成功▁挣▁脱并在太平洋时间下午12:20向警方报告。 zheng4 zheng1
8046 然而,她将警察打到失去自由,▁挣▁脱束缚,跳进罗德里格兹的拖车。 zheng4 zheng1
8083 旺儿在外躲了几日回来,哄骗凤姐,说张华因带银子在身,被人▁闷▁棍打死,张华父亲也吓死了。 men4 men1
8334 明嘉靖四十二年(1563年)由麻城、黄冈、黄▁陂▁三县析置“黄安县”。 pi2* bei1
8336 出生于湖北省黄▁陂▁县南阳乡杜家嘴。 pi2 bei1
8337 1999年,季风书园新开了以经济管理图书为主的黄▁陂▁店,然而并未运营多长时间。 pi2 bei1
8339 会后以特派员身份,回家乡组建黄▁陂▁农会。 pi2 bei1
8343 中间与上海路、南京路、青岛路、北京路、天津路、合作路、兰陵路、黎黄▁陂▁路等多条街道相交。 pi2 bei1
8348 黄▁陂▁区滠口街道有盘龙城遗址,是该地区商代人类活动留下来的遗迹。 pi2 bei1
8350 1931年7月陶峙岳参加对中央苏区第三次围剿作战,黄▁陂▁之役中,陶峙岳旅大败。 pi2 bei1
8352 7公里,至黄▁陂▁巨龙大道北侧设汉口北站,线路均为高架。 pi2 bei1
8474 对人知觉时的▁晕▁轮效应,还在于内隐人格理论的作用。 yun4 yun1
8626 笼▁蔓▁可长达30厘米。 man4 man2
8629 然而,由于人类引入,它的栖息地已开始▁蔓▁延到南美到墨西哥。 man4 man2
8690 有时朋友来访,问我,弗里茨在干▁吗▁,我回答:“他在创作普尼亚尼”。 ma2 ma5
8861 耿浩(黄渤 饰)婚姻遭遇“小三”危机,无奈与▁劈▁腿的妻子康小雨离婚,陷入了情感困境。 pi3 pi1
8873 2000年在《▁劈▁腿大情人》客串 pi3 pi1
9806 ▁嗯▁,我的名字是邓月薇,我是11号航班上的3号空服员。 ng4 en4
9807 ▁嗯▁,我们在这里听着所有的信息,我们同时也在……,你知道的,在录音。 ng4 en4
9997 鼎内若无真种子,犹将水火煮空▁铛▁。 cheng1 dang1
9998 炸灌肠的时候须先将成型的灌肠切片,在饼▁铛▁中炸至两面冒泡变脆,即取出浇上拌好的盐水蒜汁趁烫吃。 cheng1 dang1
      * 这里是错别字,应为`籍`,本句删除
      * MCD7 993页明确:湖北黄陂pi2

3) train/dev中的错误标注归类如下:

归类 句子 正确标签 原标签  
儿化音没必要单独注音 只要是哪儿有神父做弥撒,教友就赶到哪▁儿▁去望弥撒,当时在教会中形成了一种“宗教狂热”。 er2 r5  
各消音碗之间以两根连接▁杆▁所连接。 gan3 gan1  
错别字:藉–> 籍 (如国籍、学籍等) 赫尔曼·达努泽()生于弗劳恩菲尔德,是瑞士裔德国▁藉▁音乐学家。 - -  
受禅 娄昭君的儿子高洋受▁禅▁,建立北齐,追封娄内干为太原王。 shan4 chan2  
封禅 《管子》一书出自战国齐稷下学派手笔,因此或许代表了这批阴阳家们对封▁禅▁的看法。 shan4 chan2  
薄膜 每个电池有多个采用分子束外延或有机金属化学气相沉积法生成的▁薄▁膜。 bao2 bo2  
汗(当大汗解释) 39863 林丹▁汗▁死后,其子额哲率部撤回到鄂尔多斯。 han2 han4
黄澄澄* 新出缸的甜闷瓜,黄▁澄▁澄,亮闪闪,香味扑鼻,惹人喜爱。 deng1 cheng2  
帖(当字帖、碑帖解释) 所以历来将此阁▁帖▁称为“法帖之祖”。 tie4 tie3  
帖经 岑仲勉说:“明经多▁帖▁两经,似乎较难,然《孝经》、《论语》文字无多,不难兼习。 tie1 tie3  
高涨 弗拉里热情高▁涨▁,对于他来说,这是一个有利的机会。 zhang4 zhang3  
吆喝 吉祥物通过表现过去浙江小商贩走街串巷的吆▁喝▁工具体现艰苦创业,闯荡商海的精神。 he4 he1  
粘接 亦能够溶解聚甲基丙烯酸甲酯,故此用于▁粘▁接有机玻璃。 zhan1 nian2  
挣脱 一日,大象忽然▁挣▁脱了铁链,逃向格如拉山口,快到山口时停下并倒在地上打滚,鸣叫了三声。 zheng4 zheng1  
黄陂 全线北起武汉市黄▁陂▁前川,南至江夏纸坊。 pi2 bei1  
晕轮 这样就产生了▁晕▁轮效应。 yun4 yun1  
笼蔓 上位笼与笼▁蔓▁的衔接处形成一个宽5至10毫米的弯曲。 man4 man2  
缪(秦后并不通穆) 金人就颇佩服韩侂胄的气节:“韩侂胄函首才至虏界,虏之台谏文章言侂胄忠于其国,▁缪▁于其身,封为忠缪侯。 miu4 mu4  
泷州 唐朝武德四年(621年)复改为▁泷▁州。 shuang2 long2  
二十问 此章论述三角垛、三角撒星垛、四角垛、圆锥垛、刍童垛、刍甍▁垛▁。 duo4 duo3  
轧荦山 安波注之弟安延偃娶巫师阿史德氏,后者已有子▁轧▁荦山被安延偃收养,改名安禄山。 zha2 ya4  
庖脯 孙中山得知龚铁铮的死讯后,作挽联:“忍将麟凤供庖▁脯▁,如此江山待拂除”。 fu3 pu2  
颉颃 他认为“文章至于宋元诸名家,其力足以追数千载之上而与之▁颉▁颃”,不必非得模仿古人才能写出好文章。 xie2 jie2  
    * 澄的特殊之处在于,它在字典中只有cheng2,deng4,但是黄澄澄收录在“黄”字组词下,注明为deng1

4) 特殊读音

以上有一些读音涉及人名、地名或者专有名词、音译等,读音以CCTV节目播音为准,列举如下:

拼音 CCTV参考链接
阿▁塞▁拜疆 sai4 http://m.app.cctv.com/vsetv/detail/C10616/7fbd1da7e8f845ec9a592d03c57e1df1/index.shtml
▁帖▁木儿 tie1 https://tv.cctv.com/2022/12/11/VIDE4O1bmCY0ojem33IzjdkJ221211.shtml
▁颉▁利可汗 jie2 https://tv.cctv.com/2018/11/28/VIDEOVMLQKuXWE8Oxl0XAWdR181128.shtml
顾▁颉▁刚 jie2 https://tv.cctv.com/2009/12/21/VIDE1355513893661441.shtml
▁柏▁杨 bo2 http://jishi.cctv.com/2013/01/27/VIDE1359297726787654.shtml
▁磨▁砂 mo2 https://tv.cctv.com/2019/05/25/VIDEQvJpQosMttjW4X045pqW190525.shtml
地▁塞▁米松 sai4 https://tv.cctv.com/2020/06/18/VIDEdYxMQRlGuXQyI91AmmmY200618.shtml
▁轧▁荦山 zha2 https://tv.cctv.com/2016/11/01/VIDE0JAIiVdb7MIJcaiyeQmu161101.shtml
▁糊▁汤/▁糊▁汤粉 hu4 https://news.cctv.com/2014/05/01/VIDE1398944641551189.shtml(24秒-26秒之间)
▁抹▁胸 mo3 https://tv.cctv.com/2011/07/01/VIDE1356001584638442.shtml(11秒)
江▁干▁区 gan4 https://news.cctv.com/2014/10/23/VIDE1414063321632539.shtml
黎▁刹▁ cha4 https://tv.cctv.com/2018/11/21/VIDEm8cm43k4SBXeaS6Rs1yK181121.shtml
产品标▁识▁ zhi4 http://tv.cctv.com/2016/12/08/VIDEmefdoGA2ytcn9gQuNYY5161208.shtml
拉▁杆▁ gan3 https://tv.cctv.com/2011/01/20/VIDEf73OyLPuPzpyllZxhDvN110111.shtml
水▁磨▁镇 mo4 https://culture-travel.cctv.com/2013/01/08/VIDE1357614583534173.shtml
水▁磨▁沟区 mo4 https://news.cctv.com/2014/02/18/VIDE1392729839738250.shtml,http://news.cctv.com/2017/03/28/VIDEWiAB7R6Y2KgJC6aIjsUW170328.shtml
水▁磨▁石 mo2 https://www.cihai.com.cn/baike/detail/72/5516329?q=%E6%B0%B4%E7%A3%A8%E7%9F%B3

2. 爬虫

The PCP-table is treated as correct label, now the task is to get some sentences containing the words and phrases. Here I use Ba as a source. Codes here ~:

from lxml import etree
import requests
import json
from urllib.parse import quote

USER_AGENT = 'XXXX'

# load PCP_table

nn = 0
for word, phone in PCP_table:
    resp = requests.get('https://baike.baidu.com/item/%s' % (quote(word)),
            headers={'User-Agent': USER_AGENT},
            timeout=5
        )

    if '您所访问的页面不存在' in resp.content.decode():
        continue

    time.sleep(0.1)
    html = etree.HTML(resp.text)

    elements = html.xpath('//div[@class="lemmaWgt-subLemmaListTitle"]')
    if len(elements) > 0:
        signal = ''.join(elements[0].xpath('.//text()')).strip()
        if signal.startswith('这是一个多义词'):
            for item in html.xpath('//*[starts-with(@href, "/item")]'):
                if ''.join(item.xpath('./text()')) == '%s:汉语词汇' % word:
                    url = 'https://baike.baidu.com' + item.xpath('./@href')[0]
                    resp = requests.get(url,
                            headers={'User-Agent': USER_AGENT},
                            timeout=5
                        )
                    html = etree.HTML(resp.text)

    # get sentences
    for i in html.xpath('.//div[@class="para"]'):
        t = ''.join(i.xpath('.//text()')).strip().replace('\n', '').replace(' ', '')
        if word in t and len(t) > len(word) + 10 and ('读音' not in t and '汉语词语' not in t):
            f = open('sentence.txt', 'a+')
            f.write(json.dumps({'sentence': t, 'word': word, 'phone': phone}) + '\n')
            f.close()

Leave a Comment