美文网首页
语料库清洗

语料库清洗

作者: K同学啊 | 来源:发表于2018-11-25 15:34 被阅读84次

author:明天依旧可好
email:mtyjkh@outlook.com
time:2018-11-25


接着昨天的工作,今天正式开始清洗语料库。首先放上思维导图来帮助理解

语料库清洗思维导图

清洗步骤:

  1. 观察数据集中的ModifyEnName字段
  2. 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
  1. 将这种类型的数据语料写入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)
  1. 将ModifyEnNameError.csv文件中的数据进行分类,尽可能的提取我们需要的数据。

  2. 类别一:ModifyEnName字段含有“-”。
    类别二:ModifyEnName字段含有“ ”。
    类别三:ModifyEnName字段含有“|”。
    类别四:ModifyEnName字段含有“'”。
    类别五:ModifyEnName字段含有“[?]”。
    类别六:剩余没有类别的组成一类。

  3. 随后分别对这六个类别进行处理,下面是对类别一的处理。

类别一的处理流程
  1. 处理类别一,将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
  1. 处理类别一,将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
  1. 对目前的数据进行分析
    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

后面的数据处理不再在这里做记录,下一篇正式进入音译环节。

相关文章

  • 语料库清洗

    author:明天依旧可好email:mtyjkh@outlook.comtime:2018-11-25 接着昨天...

  • 如何使用CRF++工具?——以NER为例

    一、语料清洗 1,这篇文章以人民日报1998年01月语料库为例子,获取原始语料库 199801.txt : 链接:...

  • NLTK学习记录2:使用语料库和词汇资源

    内置的语料库 或者 从语料库中提取文本信息 再例如Brown语料库 内置语料库基本函数 载入本地语料库 条件频率分...

  • pyhanlp文本分类与情感分析

    语料库 本文语料库特指文本分类语料库,对应IDataSet接口。而文本分类语料库包含两个概念:文档和类目。一个文档...

  • 2019-08-05

    请问语料库的作用主要是什么,如何构建领域语料库,领域语料库建好以后,如何发挥作用。如把军事语料库作为一项研究内容的...

  • #6801#

    第4章 语料库与语言知识库 语料库统计 两层含义:利用语料库对于语言的某个方面进行研究;一句语料库所反应出来的语言...

  • Coca

    语料库

  • 自然语言处理——4. 语料库与语言知识库

    基本概念 1. 语料库 语料库(corpus)就是存放语言材料的仓库(语言数据库)。 基于语料库进行语言学研究-语...

  • 语料库与术语库

    在线语料库(国内) 语料库:http://yulk.org/[https://link.zhihu.com/?ta...

  • Python 语料库的搭建

    语料库就是我们要分析文件的合计。 语料库构建 http://blog.csdn.net/happylife_hah...

网友评论

      本文标题:语料库清洗

      本文链接:https://www.haomeiwen.com/subject/cudpqqtx.html