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