数据预处理

正则匹配格式处理

数据格式处理部分见文件:/Users/stone/PycharmProjects/ocr_Correction/data_process/fanti2jianti.py

  • 繁体转简体
  • 训练集,测试集格式转换

image-20191216203745206

# -*- coding: utf8 -*-
def test_opencc():
    import opencc
    cc = opencc.OpenCC('t2s')
    print(cc.convert(u'Open Chinese Convert(OpenCC)「開放中文轉換」,是一個致力於中文簡繁轉換的項目,提供高質量詞庫和函數庫(libopencc)。'))

from zhtools.langconv import *

def Traditional2Simplified(sentence):
    '''
    将sentence中的繁体字转为简体字
    :param sentence: 待转换的句子
    :return: 将句子中繁体字转换为简体字之后的句子
    '''
    sentence = Converter('zh-hans').convert(sentence)
    return sentence

def T2S_test():
    traditional_sentence = '憂郁的臺灣烏龜'
    simplified_sentence = Traditional2Simplified(traditional_sentence)
    print(simplified_sentence)

import re
# 正则匹配
# 讲错误的字替换为相应的正确的字
def find_text(text):
    word_dic = {}
    # m = re.match(u'<ESSAY title')
    reg = re.compile('<ESSAY title')
    # print(re.findall(u"<ESSAY title=\"(.+?)\">", text))
    sen_list = []
    for i in range(len(text)):

        if text[i].startswith("<PASSAGE"):
            sen_list.append(text[i][24:-11])
        elif text[i].startswith("<WRONG>") and text[i+1].startswith("<CORRECTION>"):
            word_dic[text[i][7:-9]] = text[i+1][12:-14]
    # print(sen_list)
    # print(word_dic)
    return sen_list, word_dic

# 语料替换,遍历原始语料库,如果在实体词典中存在,就替换,并且作为value值
def match_str(sen_list, word_dic):
    sen_dic = {}
    for c in sen_list:
        # print(c)
        for w in word_dic.keys():
            # print(w)
            if c.find(w) > 0:
                # print(w, word_dic[w])
                temp = c.replace(w, word_dic[w])
                # print(temp)
                sen_dic[c] = temp
                # break
    print(sen_dic)
    return sen_dic

def write_to_txt(file_path, sen_dict):
    with open(file_path, 'a', encoding='utf-8') as f:
        for c in sen_dict:
            f.write(c+" "+sen_dict[c])
            f.write('\n')

# 读取文件内容
def read_file(path):
    f = open(path, 'r', encoding='utf-8')
    text = f.readlines()
    # print(text)
    return text

import os
# 测试下句子
def T2S(file_path="/Users/stone/Documents/数据/public_data/Training/SIGHAN15_CSC_A2_Training.sgml"):
    # Todo
    traditional_text = read_file(file_path)
    sim_list = []
    for c in traditional_text:
        simplified_sentence = Traditional2Simplified(c)
        sim_list.append(simplified_sentence)
    # print(sim_list)
    s, d = find_text(sim_list)
    # print(s)
    # print(d)
    file_path = "../data/taiwan_spell.txt"
    write_to_txt(file_path, match_str(s, d))

if __name__=="__main__":
    # T2S_test()
    T2S()


数据格式进一步修改

  • 完成日期:2019年12月16日

/Users/stone/PycharmProjects/ocr_Correction/data/SIGHAN15_CSC_A2_Training_process.txt

src: 但 是 我 不 能 去 参 加 , 因 为 我 有 一 点 事 情 阿 !
dst: 但 是 我 不 能 去 参 加 , 因 为 我 有 一 点 事 请 阿 !
src: 听 起 来 是 一 份 很 好 的 公 司 。 又 意 思 又 很 多 钱 。
dst: 听 起 来 是 一 份 很 好 的 公 司 。 有 意 思 又 很 多 钱 。
src: 因 为 我 下 个 礼 拜 有 很 重 要 的 考 试 , 所 以 得 要 好 好 地 复 习 。
dst: 因 为 我 下 课 礼 拜 有 很 重 要 的 考 试 , 所 以 得 要 好 好 地 复 习 。
  • 结果:789 sentences

/Users/stone/PycharmProjects/ocr_Correction/data/SIGHAN15_CSC_B2_Training_process.txt

  • 结果:1453 sentences

sighan数据全部处理完毕

  • 一共2015句子,900k+

image-20191217175356022

处理结果见sighan bnake-off processed

出现问题

数据格式处理过程中产生问题

Traceback (most recent call last):
  File "/Users/stone/PycharmProjects/ocr_Correction/data_process/fanti2jianti.py", line 171, in <module>
    out_path="/Users/stone/Documents/correction_data/test2.txt")
  File "/Users/stone/PycharmProjects/ocr_Correction/data_process/fanti2jianti.py", line 145, in union_format_dir
    traditional_text = read_file(os.path.join(dir_path, text))
  File "/Users/stone/PycharmProjects/ocr_Correction/data_process/fanti2jianti.py", line 79, in read_file
    text = f.readlines()
  File "/Users/stone/anaconda3/envs/tensorflow_36/lib/python3.6/codecs.py", line 321, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 3131: invalid start byte

解决

一步一步,慢慢调试,发现产生了多余的文件'.DS_Store'

  • 方法一

在terminal中输入:

sudo find / -name ".DS_Store" -depth -exec rm {} \;

删除所有.DS_Store文件

.DS_Store是Mac OS保存文件夹的自定义属性的隐藏文件,如文件的图标位置或背景色,相当于Windows的desktop.ini。

1,禁止.DS_store生成: 打开 “终端” ,复制黏贴下面的命令,回车执行,重启Mac即可生效。

defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool TRUE

2,恢复.DS_store生成:

defaults delete com.apple.desktopservices DSDontWriteNetworkStores

数据写入时存,写不进去

  • 产生原因: 正则匹配时没有正确匹配上

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦