author:明天依旧可好
email:mtyjkh@outlook.com
time:2018-11-25
接着昨天的工作,今天正式开始清洗语料库。首先放上思维导图来帮助理解
![](https://img.haomeiwen.com/i12817583/fecf9b0daf5df37a.png)
清洗步骤:
- 观察数据集中的ModifyEnName字段
- ModifyEnName字段中该是一个不带任何符号的英文人名(例如Andy、Abrandt、Adenan),但是观察到在ModifyEnName数据中存在杂音。示例如下:
期望的语料:
EnName | Source | CnName | ModifyEnName |
---|---|---|---|
Aab | 瑞典 | 奥布 | Aab |
Aaba | 土 | 阿巴 | Aaba |
Aabel | 挪 | 奥贝尔 | Aabel |
Aabraek | 挪 | 奥布赖克 | Aabraek |
Aabrant | 瑞典 | 阿布兰特 | Aabrant |
Aaby | 瑞典 | 奥比 | Aaby |
Aabye | 英、丹、瑞典 | 奥比 | Aabye |
存在杂音的语料:
EnName | Source | CnName | ModifyEnName |
---|---|---|---|
Abdel-Ahad | 阿拉伯 | 阿卜杜勒-阿哈德 | Abdel-Ahad |
Abdel-Aziz | 阿拉伯 | 阿卜杜勒-阿齐兹 | Abdel-Aziz |
Va Rabukha | 泰 | 瓦拉武 | Va Rabukha |
Vard∅ | 挪 | 瓦尔德 | Vard[?] |
Anzer,Jean Baptiste | 1851-1903 | 安治泰〈德〉来华传教士。 | Anzer,Jean Baptiste |
Tsybul′ski | 俄 | 齐布利斯基 | Tsybul'ski |
- 将这种类型的数据语料写入ModifyEnNameError.csv文件当中(共计5041条数据)并生一个不含该类型数据的“世界人名翻译大辞典 - 2.csv”文件。
对应代码:由于部分数据中的ModifyEnName字段为空,故用row["ModifyEnName"] != row["ModifyEnName"]来处理。
if row["ModifyEnName"] != row["ModifyEnName"]:
writer_oneRow_toFile("EnNameError.csv", row)
elif not row["ModifyEnName"].isalpha():
writer_oneRow_toFile("ModifyEnNameError.csv", row)
else:
writer_oneRow_toFile("世界人名翻译大辞典 - 2.csv", row)
-
将ModifyEnNameError.csv文件中的数据进行分类,尽可能的提取我们需要的数据。
-
类别一:ModifyEnName字段含有“-”。
类别二:ModifyEnName字段含有“ ”。
类别三:ModifyEnName字段含有“|”。
类别四:ModifyEnName字段含有“'”。
类别五:ModifyEnName字段含有“[?]”。
类别六:剩余没有类别的组成一类。 -
随后分别对这六个类别进行处理,下面是对类别一的处理。
![](https://img.haomeiwen.com/i12817583/d7c483cbce3706e9.png)
- 处理类别一,将CnName字段中含有个人信息和Source字段为“塞”的数据移到useless.csv文件当中,其余数据写入ModifyEnNameError_1_0.csv文件。
移除的数据示例:
EnName | Source | CnName | ModifyEnName |
---|---|---|---|
Calixtus I-III | nan | 加里斯都一世-三世,公元3-15世纪的几位教皇和敌对教皇。 | Calixtus I-III |
Candolle,Alphonse-Louis-Pierre Pyrame de | 1806-93 | 康多尔〈法〉植物学家。 | Candolle,Alphonse-Louis-Pierre Pyrame de |
Chao-Fa | 泰 | 昭华 (王子或公主的冠称,查询时一般从其后续部分检索) | Chao-Fa |
Chao-Phya | 泰 | 昭披耶 (贵族的一种冠称,查询时一般从其后续部分检索) | Chao-Phya |
Chapu,Herri-Michel-Antoine | 1833-91 | 夏普〈法〉雕刻家、像章设计者。 | Chapu,Herri-Michel-Antoine |
- 处理类别一,将ModifyEnName字段中含有除“-”和字母以外的数据移动useless.csv文件当中,最后生成ModifyEnNameError_1_1.csv文件。
实现代码:
ModifyEnName = row["ModifyEnName"].replace("-", "")
if ModifyEnName.isalpha():
writer_oneRow_toFile("ModifyEnNameError_1_1.csv", row)
else:
print(row["ModifyEnName"])
writer_oneRow_toFile("useless.csv", row)
来看一下现阶段我们的数据
EnName | Source | CnName | ModifyEnName |
---|---|---|---|
Thong-In | 泰 | 通因 | Thong-In |
Toibu-Khaa | 俄 | 托伊布-哈 | Toibu-Khaa |
Yem-Kir-Yen | 俄 | 叶姆基尔延 | Yem-Kir-Yen |
Jelal-ad-Din | 阿拉伯 | 贾拉勒丁 | Jelal-ad-Din |
Touam-Bona | 中非 | 图安-博纳 | Touam-Bona |
Touebo-Maticia | 中非 | 图埃博-马蒂夏 | Touebo-Maticia |
- 对目前的数据进行分析
CnName字段与ModifyEnName字段中单词的数目的对应关系有以下四种,绝大部分以二对二为主(约占90%)。
关系 | CnName | ModifyEnName |
---|---|---|
一对二 | 通因 | Thong-In |
一对多 | 贾拉勒丁 | Jelal-ad-Din |
二对二 | 图安-博纳 | Touam-Bona |
二对多 | 阿布-法伊兹汗 | Abul-Feyz-Khan |
多对多 | 阿布-贝克尔-凯莱维 | Abu-Bekr-Kelevi |
处理方法:二对二型,对CnName字段与ModifyEnName字段中的数据分别做分割形成两份数据,其余类型均将字段中的内容合并为单个词汇。处理过后的数据文件为ModifyEnNameError_1_2.csv。
处理代码:
prefix_en = [] #存放从英文名中分离出来的前缀
prefix_cn = [] #存放从中文名中分离出来的前缀
for index, row in dataFrame.iterrows():
'''
9.将ModifyEnNameError_1_1.csv文件的数据进行规范化。
method:
ModifyEnName字段由两部分(含有“-”)组成,CnName字段也由两部分组成,分别将其分开形成两份数据
其余情况均将字段中的内容合并为单个词汇。
'''
if row["CnName"].count("-")==1:
if row["ModifyEnName"].count("-")==1:
row_ModifyEnName_list = row["ModifyEnName"].split("-")
row_CnName_list = row["CnName"].split("-")
if row_ModifyEnName_list[0] not in prefix_en:
prefix_en.append(row_ModifyEnName_list[0])
prefix_cn.append(row_CnName_list[0])
dataFrame["CnName"][index] = row_CnName_list[1]
dataFrame["ModifyEnName"][index] = row_ModifyEnName_list[1]
else:
dataFrame["CnName"][index] = delete_(row["CnName"])
dataFrame["ModifyEnName"][index] = delete_(row["ModifyEnName"])
else:
dataFrame["CnName"][index] = delete_(row["CnName"])
dataFrame["ModifyEnName"][index] = delete_(row["ModifyEnName"])
dataFrame.to_csv("ModifyEnNameError_1_2.csv",mode="a",index=False,sep='|')
#将由前缀生成的数据写入文件
for each_one, each_two in zip(prefix_cn, prefix_en):
writer_oneRow_toFile("ModifyEnNameError_1_2.csv",["emptyBykzb","emptyBykzb",each_one,each_two])
来看一下经过清洗过后类别一现在的数据(部分数据):
EnName | Source | CnName | ModifyEnName |
---|---|---|---|
Wolde-michael | 埃塞 | 迈克尔 | michael |
Yem-Kir-Yen | 俄 | 叶姆基尔延 | YemKirYen |
Yod-Arvuth | 泰 | 约阿武 | YodArvuth |
Zane-Fe | 中非 | 费 | Fe |
Vajranana-Varorasa | 泰 | 瓦罗拉沙 | Varorasa |
Vi--Dina | 乍 | 维迪纳 | ViDina |
Wan-Ngan | 泰 | 万岸 | WanNgan |
Wata-Wata | 刚(金) | 瓦塔 | Wata |
emptyBykzb | emptyBykzb | 阿卜杜勒 | Abdel |
emptyBykzb | emptyBykzb | 阿卜杜勒 | Abdol |
emptyBykzb | emptyBykzb | 阿卜杜 | Abdo |
后面的数据处理不再在这里做记录,下一篇正式进入音译环节。
网友评论