一种中文拼写纠错的数据集构造方法

文档序号:30443982发布日期:2022-06-17 23:41阅读:409来源:国知局

1.本发明涉及中文文本简化领域,特别涉及一种中文拼写纠错的数据集构造方法。


背景技术:

2.伴随着21世纪互联网技术和网络通信的高速发展,通过输入拼音进行文字检索已经成为人们日常生活中必不可少的一项活动。通过拼音进行文字输入的方式比复杂的五笔输入、手写输入等方式需要的掌握门槛更低,且能够表达更加特定而精确的信息。然而,人们利用拼音进行文字检索的同时,也因中文拼音有多个同音字的特性,受到互联网巨大词汇量的干扰,导致最终输出与想表达本意有出入的内容。为此,人们迫切的需要一个特殊的工具,不是直接返回输出的内容,而是对其进行检查和修正,将经过检查和修正后的真正内容返回并输出,称之为中文拼写纠错。
3.现有的中文拼写纠错方法均采用基于神经网络的方法,数据集的规模和质量直接影响着基于神经网络的方法性能。现有的中文拼写纠错数据集都来源于sighan 2013、sighan 2014、sighan 2015。这个数据集不仅规模比较小,且只考虑了字出错的情况,没有考虑词的错误。如果训练数据集中没有词的错误,模型很难学习到关于词语错误的纠正。为此,我们将关注点置于如何构建一个词错误的中文拼写数据集。
4.词错误的中文拼写数据集构造算法的目标是选定一个新闻句中的二字词语,在同音字集合中寻找一个与之同音不同形的二字词语替换它,因此,可以得到新闻句中出错的词语及其位置信息。目前中文领域暂无公开的词错误的中文拼写数据集。在研究现有的关于英文单词拼写纠错的过程中,我们发现,英文单词的拼写错误常常是由于出现了一个或多个错误的字符,从而导致输入的单词不存在于字典中。然而,通过这种方式产生数据集的算法对于中文词语拼写纠错具有很大的局限性。首先,一个汉字如果可以在计算机系统中被输入,就说明它是存在于字典中的,这说明,在基于计算机语言的处理环境中,拼写错误实际上是误用了无法被自动检测的字符。另外,从汉字的构成来看,有许多汉字是音意复合字,因此,在汉语中,拼写错误不仅是语义混淆的误用字符,更重要的是语音相似的字符。


技术实现要素:

5.本发明的目的是克服现有技术缺陷,提供一种中文拼写纠错的数据集构造方法,能够在没有任何人工干预的情况下标记句子中出错的词语及其位置信息,充分考虑了中文拼音中的语音相似性,从而产生更加全面、详细、精准的中文拼写纠错数据集。
6.本发明的目的是这样实现的:一种中文拼写纠错的数据集构造方法,其特征在于,包括以下步骤:
7.步骤1)获取若干个新闻文章正文,利用分句工具,对所述新闻文章正文进行分句,构成初始的新闻句集合sentence_r={s1,s2,

,si,

,sn},si表示在初始返回新闻句集合sentence_r中第i句句子,n表示sentence_r中句子的数目,1≤i≤n;
8.步骤2)获取公开的以下词语文本资源:互联网词库sogouw、中文词语搭配库
sogour,构建同音词集合w;
9.步骤3)根据所述同音词集合w,依次对新闻句集合sentence_r中的句子si进行筛选;若si中含有同音词集合w中的任意一个词语,执行步骤4),否则,令i=i+1,继续执行步骤3);
10.步骤4)假设所述同音词集合w中的某一词语w出现在新闻句集合sentence_r的某一句子s中,利用分词工具,s={w1,w2,

,w,

,wn},n表示s中词语的数目,根据同音词集合w,获取词语w的第1个同音不同形的词语w

,并以w

替换句子s中的词语w,替换一个词语后的句子s

={w1,w2,

,w

,

,wn},记替换词语后句子组成的集合为替换词语后句子组成的集合sentence_w;
11.步骤5)获得被替换的词语w及其位置信息,记为location;
12.步骤6)对新闻句集合sentence_r和所述替换词语后句子组成的集合sentence_w进行处理,得到句子对集合new_data。
13.作为本发明的进一步限定,所述步骤2)包括以下步骤:
14.步骤2.1)利用分词工具对互联网词库sogouw的语料列表进行分词,选取二字词语组成集合sogoulabdic_w={s_w1,s_w2,

,s_wm,

,s_wn},s_wm表示在所述词语集合sogoulabdic_w中第m个二字词语,1≤m≤n;
15.步骤2.2)利用分词工具对中文词语搭配库sogour的语料列表进行分词,选取二字词语组成集合sogoulabdic_r={s_r1,s_r2,

,s_r
p
,

,s_rn},s_r
p
表示在二字词语集合sogoulabdic_r中第p个二字词语,1≤p≤n;
16.步骤2.3)合并两个词语集合sogoulabdic_w和sogoulabdic_r,并进行去重,获得二字词语集合chinese_twoword={w1,w2,

,wq,

,wn},wq表示在所述词语集合chinese_twoword中第q个二字词语,1≤q≤n;
17.步骤2.4)获取所述二字词语集合chinese_twoword中词语wi∈chinese_twoword对应的词语拼音pinyinw,定义i的初值为1;
18.步骤2.5)定义一个词语字典pinyin_w,若所述词语wi所对应的拼音pinyinw不存在于词语字典目前的键中,则pinyinw形成一个新的键,wi成为此键的第一个值,否则,词语wi添加成为此键末尾的对象;
19.步骤2.6)令i=i+1,返回步骤2.4),直至chinese_twoword中的所有词语处理完毕;
20.步骤2.7)对所述词语字典pinyin_w的键进行排序,获得排序后的词语字典键集合pinyin_sorted_keys={p1,p2,

,pn};
21.步骤2.8)根据所述排序后的词语字典键集合pinyin_sorted_keys的次序,获取键pj∈pinyin_sorted_keys对应的值,此值的集合称之为v,定义j的初值为1;
22.步骤2.9)假设集合v中有k个二字词语,从k个词语中,依次取出一个,作为原词,其余词语作为其同音不同形的词,组成的集合为wj={(w1:w
2 w3…
wk),(w2:w
1 w3…
wk),

,(wk:w
1 w2…wk-1
)};
23.步骤2.10)将wj添加至同音词集合w;
24.步骤2.11)令j=j+1,返回步骤2.8),直至排序后的词语字典键集合pinyin_sorted_keys中的所有键处理完毕。
25.作为本发明的进一步限定,所述步骤4)包括以下步骤:
26.步骤4.1)获取同音词集合w中单个键的词语集合wi∈w,利用分词工具对单个键的词语集合wi进行分词,wi中的原词,即“:”前的词语,记作w,同音词集合w中与原词同音不同形的替换词,即“:”后的第一个词语,记作w’,定义i的初值为1;
27.步骤4.2)对新闻句集合sentence_r中的句子sj(1≤j≤n),根据所述单个键的词语集合wi进行筛选和替换,定义j的初值为1;
28.步骤4.3)令i=i+1,返回步骤4.1),直至同音词集合w中的所有单个键的词语集合处理完毕;
29.步骤4.4)对替换词语后句子组成的多次替换集合sentence_wrong_repeat,根据句子拼音进行排序,以排序后的句子更新多次替换集合sentence_wrong_repeat;
30.步骤4.5)定义一个句子字典pinyin_s;
31.步骤4.6)获取多次替换集合sentence_wrong_repeat中句子s_repeat
p
∈sentence_wrong_repeat,此时集合中包含的内容是经过替换词语和排序的语句列表,定义p的初值为1;
32.步骤4.7)获取s_repeat
p
对应的句子拼音pinyins;
33.步骤4.8)若所述句子s_repeat
p
所对应的拼音pinyins不存在于所述句子字典pinyin_s目前的键中,则pinyins形成一个新的键,s_repeat
p
成为此键的第一个值,否则,句子s_repeat
p
添加成为此键末尾的对象;
34.步骤4.9)令p=p+1,返回步骤4.6),直至多次替换集合sentence_wrong_repeat中的所有句子处理完毕;
35.步骤4.10)获取句子字典pinyin_s中单个键的句子集合sq∈pinyin_s,定义q的初值为1;
36.步骤4.11)获取所述单个键的句子集合sq的第一个值,记作s
′m,将s
′m添加至替换词语后句子组成的集合sentence_w,定义m的初值为1;
37.步骤4.12)令m=m+1,q=q+1,返回步骤4.10),直至所述句子字典pinyin_s中的所有键值处理完毕。
38.作为本发明的进一步限定,所述步骤4.2)具体包括以下步骤:
39.步骤4.2.1)利用分词工具,对sj进行分词,sj={w1,w2,

,wn},n表示sj中词语的数目;
40.步骤4.2.2)若sj中某一词语wu==w,1≤u≤n,即sj={w1,w2,

,w,

,wn},用w’替换w,记替换词语后的句子为s_repeatk,s_repeatk={w1,w2,

,w

,

,wn},定义k的初值为1,继续向下执行,否则,令j=j+1,重复步骤4.2),直至新闻句集合sentence_r中的句子处理完毕;
41.步骤4.2.3)将s_repeatk添加至替换词语后句子组成的多次替换集合sentence_wrong_repeat,同时,令k=k+1,j=j+1,重复步骤4.2),直至新闻句集合sentence_r中的句子处理完毕。
42.作为本发明的进一步限定,所述步骤5)包括以下步骤:
43.步骤5.1)获得新闻语料原句s_right
x
∈sentence_r,获得修改同音词后的句子s_wrongy∈sentence_w,定义x的初值为1,定义y的初值为1;
44.步骤5.2)获取s_right
x
的拼音s_wrongy的拼音若与同,继续向下执行,否则,令y=y+1,返回步骤5.1),直至替换词语后句子组成的集合sentence_w中的所有句子处理完毕;
45.步骤5.3)定义替换编号idi=i,定义i的初值为1;
46.步骤5.4)获得新闻语料原句s_right
x
与修改同音词后的句子s_wrongy的前n个相同的字符;
47.步骤5.5)利用bert中的分词器berttokenizer,对字符串result以字为单位进行分词,分词后的集合称之为r,依次连接符号“[cls]”、分词后的集合r、符号“[sep]”,连接后的序列记为重合分词序列repeat_tokens;
[0048]
步骤5.6)利用bert中的分词器berttokenizer,对新闻语料原句s_right
x
以字为单位进行分词,分词后的集合称之为s,依次连接符号“[cls]”、分词后的集合s、符号“[sep]”,连接后的序列记为正确句分词序列right_tokens;
[0049]
步骤5.7)获取重合分词序列repeat_tokens的长度l,记repeat_len=l-2;
[0050]
步骤5.8)获得正确句分词序列right_tokens中第repeat_len项、第repeat_len+1项和第repeat_len+2项,分别记作c0、c1、c2;
[0051]
步骤5.9)若c2为“。”或“,”/“、”/“?”/“:”/“;”/“《”/“》”/“!”/“(”/“)”/“[sep]”,执行步骤5.10.1),否则,执行步骤5.10.2);
[0052]
步骤5.10)合并句子对替换编号、替换词位置、替换词,并添加进集合;
[0053]
步骤5.10.1)将所述替换编号idi、数字repeat_len、c0、数字repeat_len+1、c1依次添加至集合locationi,以“,”隔开,执行步骤5.11);
[0054]
步骤5.10.2)将所述替换编号idi、数字repeat_len+1、c1、数字repeat_len+2、c2依次添加至集合locationi,以“,”隔开,继续执行步骤5.11);
[0055]
步骤5.11)将locationi添加至集合location;
[0056]
步骤5.12)令y=1,x=x+1,i=i+1,返回步骤5.1),直至新闻句集合sentence_r中的所有句子处理完毕。
[0057]
作为本发明的进一步限定,所述步骤5.4)具体包括以下步骤:
[0058]
步骤5.4.1)将s_right
x
与s_wrongy传入一个二维矩阵,s_right
x
作为第一行,s_wrongy作为第二行;
[0059]
步骤5.4.2)二维矩阵中,若第1行j列与第2行第j列的字符相同,则记第1行j列的字符为samej,定义j的初值为1;
[0060]
步骤5.4.3)令j=j+1,重复步骤5.4.2),直至第j列的第1行、第2行字符不同,继续执行步骤5.4.4);
[0061]
步骤5.4.4)将same1、same2…
same
j-1
拼接,添加至字符串result。
[0062]
作为本发明的进一步限定,所述步骤6)包括以下步骤:
[0063]
步骤6.1)定义id=1,称id为句子编号;
[0064]
步骤6.2)获取新闻句集合sentence_r中句子si∈sentence_r,获取si的拼音定义i的初值为1;
[0065]
步骤6.3)获取替换词语后句子组成的集合sentence_w中句子s
′j∈sentence_w,
获取s
′j的拼音定义j的初值为1;
[0066]
步骤6.4)若与相同,则向下执行;否则,令j=j+1,返回步骤6.3,直至替换词语后句子组成的集合sentence_w中的所有句子处理完毕;
[0067]
步骤6.5)定义一个字典new_data
id
,将所述字典new_data
id
的键定义为:’id’、’src’、’tgt’,并将这些键的初始值均定义为空;
[0068]
步骤6.6)将不足6位的句子编号id扩展为6位,并写入字典;
[0069]
步骤6.7)将si添加为所述字典new_data
id
中的键’tgt’所对应的值;
[0070]
步骤6.8)将s
′j添加为所述字典new_data
id
中的键’src’所对应的值;
[0071]
步骤6.9)将所述字典new_data
id
添加到句子对集合new_data中,令id=id+1;
[0072]
步骤6.10)令j=j+1,返回步骤6.3),直至所述替换词语后句子组成的集合sentence_w中的所有句子处理完毕;
[0073]
步骤6.11)令i=i+1,返回步骤6.2),直至所述新闻句集合sentence_r中的所有句子处理完毕;
[0074]
步骤6.12)对所述句子对集合new_data,以单引号替换句子中所有自动生成的双引号,更新句子对集合new_data。
[0075]
作为本发明的进一步限定,所述步骤6.6)包括以下步骤:
[0076]
步骤6.6.1)获取句子编号id长度,记作len
id

[0077]
步骤6.6.2)若len
id
《6,则在句子编号id前加“0”补齐,否则,正常输出句子编号id;
[0078]
步骤6.6.3)将6位句子编号id添加为所述字典new_data
id
中的键’id’所对应的值。
[0079]
本发明采用以上技术方案,与现有技术相比,有益效果为:1)本发明利用词语之间的读音关系,构建了同音词集合,然后对大量新闻句进行分词、中文与拼音转换和检索,最后替换相应的同音词,形成数据集。因此,该方法相对已有的算法,不仅充分考虑了词语出错的情况,能够严谨、准确的替换语料中出错的二字词语,在生成最终数据集的过程中,还考虑了数据集内容的覆盖性和冗余性,尽可能获取了覆盖性高、冗余性低的语料,充分保证了数据集的质量。
[0080]
2)本发明在构建同音词集合和中文拼写纠错数据集的过程中,将中文与拼音的转换应用于系统中,加强了对中文拼音中语音相似性特征的重视程度,能够有效的抓住词语读音之间的紧密联系,克服了现有技术中只针对不存在于字典中的字符进行纠正的缺陷,从而解决了传统方法中对语料特征利用不够充分的问题。
[0081]
3)本发明利用中文词语的语音相似性特征,根据词语的拼音转换结果,自主构建了同音词集合,在筛选同音词的过程中,将互联网词库与中文词语搭配库两种不同的资源相结合,考虑了同音词的多样性,从而能够更为准确且全面的涵盖中文范围内的同音词。
[0082]
4)本发明将长新闻句视作由若干个词语组成的序列,通过依次对每个词语进行检索的方式,有效避免了在词语替换的过程中出现非词语组合,保证检索和词语替换的准确率,进而提升了长新闻句与替换词语之间的相关性,克服了传统方法中因忽略中文分词而造成的句子歧义的缺陷,不仅如此,该方法有效弥补了单一词语检索时可能出现的无效替换情况,保证了数据集的全面性。
具体实施方式
[0083]
本实施例中,一种中文拼写纠错的数据集构造方法,包括以下步骤:
[0084]
步骤1)获取若干个新闻文章正文,对人民网的新闻信息,以新闻发布的时间为基准进行追溯,对网站的多个版面进行人工筛选,获取从2020年1月-2020年2月发布的若干个新闻的文章正文。如,获取新闻时间为“2020年1月1日”,返回当日的若干个新闻页面,为避免信息冗余,对所述新闻页面进行人工筛选,筛选条件为:符合所述日期要求、无重复报道、该条新闻包含大于10句完整的句子。所述新闻语料由国家重点新闻网站人民网发布,可以从“http://www.people.com.cn/”获取。利用分句工具,如stanford corenlp工具,对所述新闻文章正文进行分句,构成初始的新闻句集合sentence_r={s1,s2,

,si,

,sn},si表示在初始返回新闻句集合sentence_r中第i句句子,n表示sentence_r中句子的数目,1≤i≤n;
[0085]
步骤2)获取公开的以下词语文本资源:互联网词库sogouw、中文词语搭配库sogour,构建同音词集合w;
[0086]
步骤2.1)利用分词工具,如stanford corenlp工具对互联网词库sogouw的语料列表进行分词,选取二字词语组成集合sogoulabdic_w={s_w1,s_w2,

,s_wm,

,s_wn},s_wm表示在所述词语集合sogoulabdic_w中第m个二字词语,1≤m≤n;互联网词库sogouw由搜狗实验室发布,可以从“http://www.sogou.com/labs/resource/w.php”获取;
[0087]
步骤2.2)利用分词工具对中文词语搭配库sogour的语料列表进行分词,选取二字词语组成集合sogoulabdic_r={s_r1,s_r2,

,s_r
p
,

,s_rn},s_r
p
表示在二字词语集合sogoulabdic_r中第p个二字词语,1≤p≤n;中文词语搭配库sogour由搜狗实验室发布,可以从“http://www.sogou.com/labs/resource/r.php”获取;
[0088]
步骤2.3)合并两个词语集合sogoulabdic_w和sogoulabdic_r,并进行去重,获得二字词语集合chinese_twoword={w1,w2,

,wq,

,wn},wq表示在所述词语集合chinese_twoword中第q个二字词语,1≤q≤n;从两个词库中分别提取二字词语,目的是获取足够多的二字词语,充分考虑词语读音的多样性,保证对中文二字词语进行准确且全面的收集和概括;
[0089]
步骤2.4)获取所述二字词语集合chinese_twoword中词语wi∈chinese_twoword对应的词语拼音pinyinw,定义i的初值为1;这里的中文与拼音的转换选择python语言的pypinyin包进行处理,转换过程中不考虑拼音的音调;
[0090]
步骤2.5)定义一个词语字典pinyin_w,若所述词语wi所对应的拼音pinyinw不存在于词语字典目前的键中,则pinyinw形成一个新的键,wi成为此键的第一个值,否则,词语wi添加成为此键末尾的对象;即每出现一个新的拼音组合,就形成一个新的键;
[0091]
步骤2.6)令i=i+1,返回步骤2.4),直至chinese_twoword中的所有词语处理完毕;
[0092]
步骤2.7)对所述词语字典pinyin_w的键进行排序,获得排序后的词语字典键集合pinyin_sorted_keys={p1,p2,

,pn};这里的排序选择python语言的内置函数sorted()进行处理;
[0093]
步骤2.8)根据所述排序后的词语字典键集合pinyin_sorted_keys的次序,获取键pj∈pinyin_sorted_keys对应的值,此值的集合称之为v,定义j的初值为1;即对字典中每
一个拼音键所对应的值进行处理;
[0094]
步骤2.9)假设集合v中有k个二字词语,从k个词语中,依次取出一个,作为原词,其余词语作为其同音不同形的词,组成的集合为wj={(w1:w
2 w3…
wk),(w2:w
1 w3…
wk),

,(wk:w
1 w2…wk-1
)};进行此步骤的目的是:列举出所有同音词的情况,保证后续进行替换词检索的全面性;
[0095]
步骤2.10)将wj添加至同音词集合w;
[0096]
步骤2.11)令j=j+1,返回步骤2.8),直至排序后的词语字典键集合pinyin_sorted_keys中的所有键处理完毕。
[0097]
步骤3)根据所述同音词集合w,依次对新闻句集合sentence_r中的句子si进行筛选;若si中含有同音词集合w中的任意一个词语,执行步骤4),否则,令i=i+1,继续执行步骤3);
[0098]
步骤4)假设所述同音词集合w中的某一词语w出现在新闻句集合sentence_r的某一句子s中,利用分词工具,s={w1,w2,

,w,

,wn},n表示s中词语的数目,在本例中,将一个新闻句认为是由几个具有紧密联系的词语组成的自然语言词语序列,例如,新闻句“他下山登上专列”包含四个词语,分别为“他”,“下山”,“登上”,“专列”而这四个词语之间是有紧密联系的。根据同音词集合w,获取词语w的第1个同音不同形的词语w

,并以w

替换句子s中的词语w,替换一个词语后的句子s

={w1,w2,

,w

,

,wn},记替换词语后句子组成的集合为替换词语后句子组成的集合sentence_w;
[0099]
步骤4.1)获取同音词集合w中单个键的词语集合wi∈w,利用分词工具,如stanford corenlp工具对单个键的词语集合wi进行分词,wi中的原词,(即“:”前的词语)记作w,同音词集合w中与原词同音不同形的替换词,(即“:”后的第一个词语)记作w’,定义i的初值为1;
[0100]
步骤4.2)对新闻句集合sentence_r中的句子sj(1≤j≤n),根据所述单个键的词语集合wi进行筛选和替换,定义j的初值为1;
[0101]
步骤4.2.1)利用分词工具,对sj进行分词,sj={w1,w2,

,wn},n表示sj中词语的数目;
[0102]
步骤4.2.2)若sj中某一词语wu==w,1≤u≤n,即sj={w1,w2,

,w,

,wn},用w’替换w,记替换词语后的句子为s_repeatk,s_repeatk={w1,w2,

,w

,

,wn},定义k的初值为1,继续向下执行,否则,令j=j+1,重复步骤4.2),直至新闻句集合sentence_r中的句子处理完毕;在筛选过程中,设置一个变量x,x=n,用以标记在某一句句子中检索的次数;
[0103]
步骤4.2.3)将s_repeatk添加至替换词语后句子组成的多次替换集合sentence_wrong_repeat,同时,令k=k+1,j=j+1,重复步骤4.2),直至新闻句集合sentence_r中的句子处理完毕;
[0104]
步骤4.3)令i=i+1,返回步骤4.1),直至同音词集合w中的所有单个键的词语集合处理完毕;
[0105]
步骤4.4)对替换词语后句子组成的多次替换集合sentence_wrong_repeat,根据句子拼音进行排序,以排序后的句子更新多次替换集合sentence_wrong_repeat;
[0106]
步骤4.5)定义一个句子字典pinyin_s;
[0107]
步骤4.6)获取多次替换集合sentence_wrong_repeat中句子s_repeat
p

sentence_wrong_repeat,此时集合中包含的内容是经过替换词语和排序的语句列表,定义p的初值为1;此时,初始新闻句与所述替换词语后句子是一对多的关系;
[0108]
步骤4.7)获取s_repeat
p
对应的句子拼音pinyins;
[0109]
步骤4.8)若所述句子s_repeat
p
所对应的拼音pinyins不存在于所述句子字典pinyin_s目前的键中,则pinyins形成一个新的键,s_repeat
p
成为此键的第一个值,否则,句子s_repeat
p
添加成为此键末尾的对象;
[0110]
步骤4.9)令p=p+1,返回步骤4.6),直至多次替换集合sentence_wrong_repeat中的所有句子处理完毕;
[0111]
步骤4.10)获取句子字典pinyin_s中单个键的句子集合sq∈pinyin_s,定义q的初值为1;
[0112]
步骤4.11)获取所述单个键的句子集合sq的第一个值,记作s
′m,将s
′m添加至替换词语后句子组成的集合sentence_w,定义m的初值为1;进行此步骤的目的是:使原始新闻句子和替换词语后的新闻句子一一对应,在去除冗余结果的同时,保证数据集的多样性。
[0113]
步骤4.12)令m=m+1,q=q+1,返回步骤4.10),直至所述句子字典pinyin_s中的所有键值处理完毕。
[0114]
步骤5)获得被替换的词语w及其位置信息,记为location;
[0115]
步骤5.1)获得新闻语料原句s_right
x
∈sentence_r,获得修改同音词后的句子s_wrongy∈sentence_w,定义x的初值为1,定义y的初值为1;
[0116]
步骤5.2)获取s_right
x
的拼音s_wrongy的拼音若与相同,继续向下执行,否则,令y=y+1,返回步骤5.1),直至替换词语后句子组成的集合sentence_w中的所有句子处理完毕;
[0117]
步骤5.3)定义替换编号idi=i,定义i的初值为1;
[0118]
步骤5.4)获得新闻语料原句s_right
x
与修改同音词后的句子s_wrongy的前n个相同的字符;这里利用压包zip()查找字符串数组中的最长公共前缀的方法,获取对应句子中相同的字符;
[0119]
步骤5.4.1)将s_right
x
与s_wrongy传入一个二维矩阵,s_right
x
作为第一行,s_wrongy作为第二行;
[0120]
步骤5.4.2)二维矩阵中,若第1行j列与第2行第j列的字符相同,则记第1行j列的字符为samej,定义j的初值为1;
[0121]
步骤5.4.3)令j=j+1,重复步骤5.4.2),直至第j列的第1行、第2行字符不同,继续执行步骤5.4.4);
[0122]
步骤5.4.4)将same1、same2…
same
j-1
拼接,添加至字符串result;
[0123]
步骤5.5)利用bert中的分词器berttokenizer,对字符串result以字为单位进行分词,分词后的集合称之为r,依次连接符号“[cls]”、分词后的集合r、符号“[sep]”,连接后的序列记为重合分词序列repeat_tokens;bert是一种预训练的transformer语言模型,该模型的训练方法可以参考devlin等人撰写的论文“bert:pre-training of deep bidirectional transformers for language understanding”,发表时间2018年。在这里,“[cls]”为序列起始标识符,“[sep]”为分词结束的标志;
[0124]
步骤5.6)利用bert中的分词器berttokenizer,对新闻语料原句s_right
x
以字为单位进行分词,分词后的集合称之为s,依次连接符号“[cls]”、分词后的集合s、符号“[sep]”,连接后的序列记为正确句分词序列right_tokens;
[0125]
步骤5.7)获取重合分词序列repeat_tokens的长度l,为了获取重复的字符长度,需要去除连接符号“[cls]”和“[sep]”,记repeat_len=l-2;
[0126]
步骤5.8)获得正确句分词序列right_tokens中第repeat_len项、第repeat_len+1项和第repeat_len+2项,分别记作c0、c1、c2;
[0127]
步骤5.9)若c2为“。”(或“,”/“、”/“?”/“:”/“;”/“《”/“》”/“!”/“(”/“)”/“[sep]”),执行步骤5.10.1),否则,执行步骤5.10.2);过滤结果中的非字符值,提升结果的准确度和可利用性;
[0128]
步骤5.10)合并句子对替换编号、替换词位置、替换词,并添加进集合;
[0129]
步骤5.10.1)将所述替换编号idi、数字(repeat_len)、c0、数字(repeat_len+1)、c1依次添加至集合locationi,以“,”隔开,执行步骤5.11);
[0130]
步骤5.10.2)将所述替换编号idi、数字(repeat_len+1)、c1、数字(repeat_len+2)、c2依次添加至集合locationi,以“,”隔开,继续执行步骤5.11);
[0131]
步骤5.11)将locationi添加至集合location;
[0132]
步骤5.12)令y=1,x=x+1,i=i+1,返回步骤5.1),直至新闻句集合sentence_r中的所有句子处理完毕。
[0133]
步骤6)对新闻句集合sentence_r和所述替换词语后句子组成的集合sentence_w进行处理,得到句子对集合new_data。
[0134]
步骤6.1)定义id=1,称id为句子编号;
[0135]
步骤6.2)获取新闻句集合sentence_r中句子si∈sentence_r,获取si的拼音定义i的初值为1;
[0136]
步骤6.3)获取替换词语后句子组成的集合sentence_w中句子s
′j∈sentence_w,获取s
′j的拼音定义j的初值为1;
[0137]
步骤6.4)若与相同,则向下执行;否则,令j=j+1,返回步骤6.3,直至替换词语后句子组成的集合sentence_w中的所有句子处理完毕;
[0138]
步骤6.5)定义一个字典new_data
id
,将所述字典new_data
id
的键定义为:’id’、’src’、’tgt’,并将这些键的初始值均定义为空;id用来标记序列编号,src用来标记错误句,tgt用来标记正确句;
[0139]
步骤6.6)将不足6位的句子编号id扩展为6位,并写入字典;
[0140]
步骤6.6.1)获取句子编号id长度,记作len
id

[0141]
步骤6.6.2)若len
id
《6,则在句子编号id前加“0”补齐,否则,正常输出句子编号id;如,原id为128,写入字典的id格式应为000128;
[0142]
步骤6.6.3)将6位句子编号id添加为所述字典new_data
id
中的键’id’所对应的值;
[0143]
步骤6.7)将si添加为所述字典new_data
id
中的键’tgt’所对应的值;
[0144]
步骤6.8)将s
′j添加为所述字典new_data
id
中的键’src’所对应的值;
[0145]
步骤6.9)将所述字典new_data
id
添加到句子对集合new_data中,令id=id+1;
[0146]
步骤6.10)令j=j+1,返回步骤6.3),直至所述替换词语后句子组成的集合sentence_w中的所有句子处理完毕;
[0147]
步骤6.11)令i=i+1,返回步骤6.2),直至所述新闻句集合sentence_r中的所有句子处理完毕;
[0148]
步骤6.12)对所述句子对集合new_data,以单引号替换句子中所有自动生成的双引号,更新句子对集合new_data。
[0149]
本发明充分利用文档中的同音词集合,能够在没有任何人工干预的情况下标记句子中出错的词语及其位置,填补了中文文本简化领域的空白,为中文拼写自动纠正的后续研究奠定了基础。
[0150]
本发明并不局限于上述实施例,在本发明公开的技术方案的基础上,本领域的技术人员根据所公开的技术内容,不需要创造性的劳动就可以对其中的一些技术特征作出一些替换和变形,这些替换和变形均在本发明的保护范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1