常用的文本清洗与预处理步骤一般如下:
一、去除数字:
数字在文本分析中一般没有意义,所以在进一步分析前需要去除它们。
【我觉得数字对于语义的理解还是有一定作用的,将所有数字(阿拉伯数字和单词)更换为一个标注<num>会不会更好?】
二、去除链接地址:
链接地址显然也需要在进一步分析前被去掉,可以使用正则表达式达到这个目的。
三、去除停用词:
停用词是在每个句子中都很常见,但对分析没有意义的词。比如英语中的“is”、“but”、“shall”、“by”,汉语中的“的”、“是”、“但是”等。语料中的这些词可以通过匹配文本处理程序包中的停用词列表来去除。
【去除停用词目前来说真的很有必要,结合我之前的经验,去除停用词会明显提升结果;所以如果对于语义分析的话,没有实际意义的停用词该去则去】
四、次干化:
词干化,指的是将单词的派生形式缩减为其词干的过程,已经有许多词干化的方法。词干化主要使用在英文中,如“programming”、“programmer”、“programmed” 、“programmable”等词可以词干化为“program”,目的是将含义相同、形式不同的词归并,方便词频统计。
【词干化很有必要,这样会极大程度剪短你的单词列表,提高效率;但也有问题,无法分析词不同形态的语义了】
五、后缀丢弃算法:
后缀丢弃算法(Suffix-dropping algorithms)可以丢弃一个单词的后缀部分。如前文提到的“programming”、“programmer”、“programmed”、“programmable”等词可以词干化为其词根“program”,但像“rescuing”、“rescue”、“rescued”这样的词则被词干化为“rescu”,其并非一个单词或词根,而是将后缀丢弃后得到的形式。
六、词形还原:
词形还原算法(Lemmatisation algorithms)将语料中的每个词还原为其原形,或者能表达完整语义的一般形式,如“better”还原为“good”、“running”还原为“walk”等。该算法的实现基于对文本的理解、词性标注和对应语言的词库等。
【感觉没有必要,单纯从语义分析的角度来说,有的评测任务可能是看单词相似度】
七、n-gram分析:
n-gram分析指的是将字符串按一定最小单元分割为长度为n的连续子串,保留最有意义的子串,以方便后续分析。如当n=1时(称为unigram),以单个字母为最小单元,单词“flood”可以被分割为“f”、“l”、“o”、“o”、“d”。对于更大的n,比如n=5,在单词“flooding”的五元连续子串中,显然需要保留“flood”。不过在n=4时,“flooding”中的“ding”也可能被判断为一个有意义的词。对于一个完整的句子而言,常用单词作为最小分割单元。
【对于词形态学分析很有必要,起到一定作用,典型代表是fasttext】
八、去除标点符号:
标点符号显然对文本分析没有帮助,因此需要去除。
【根据你处理文本的长度,每次的输入语料长度如果都已经分割好了,就可以去掉了】
九、去掉空白符:
可以使用正则表达式去掉词前后的空白字符,只保留词本身。
【除了空白符,一些其他标点符号也要去掉】
十、去除特殊字符:
在进行了去除空白字符、数字和标点符号等操作后,一些形式特殊的链接地址等额外内容可能仍然未被去除,需要对处理后的语料再进行一次检查,并用正则表达式去除它们。