文本歧义:
文本/数据歧义定义较为困难,教程定义为从原生数据中获取一段机器可读的已格式化文本之前所要做的所有预处理工作。该过程应该涉及数据再加工,文本清理,预定预处理,标识化处理,词干提取或词形还原以及停用词移除等操作。下面以一个csv文件处理为例
import csv
with open('example.csv','rt')as f:
reader=csv.reader(f,delimiter=',',quotechar='"')
for line in reader:
print (line[1])
在操作过程中可以自定义相关的分隔符合应用符(quoting character)
结果:
"for the lichking"
通常文档类型的处理流程:
对于csv文件处理可能是最为常见的形式,还有一种json也是常见的文件形式:
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。下面一个json文件的实例:
其中example.json文件内容:
{
"array":"{1,2,3,4}",
"boolean":"True",
"object":{
"a":"b"
},
"string":"Hello World"
}
结果:
import json
jsonfile=open('example.json')
data=json.load(jsonfile)
print(data['array'])
文本清理:
将各种数据源解析成文本形式后,要使原生数据源体现他们的意义。文本清理就是泛指针对文本所做的绝大部分清理、与相关数据源的依赖关系,性能解析和外部噪声等。与上一篇中html_clean()对HTML文件进行清理一样。其他文件我们视文件而定,如果要解析PDF文件,可能就要清理掉一些不必要的干扰字符,移除ASCII字符等。要将文件进行清算成像XML文件一样的数据源,只需关注我们所需的一些文件。对于数据库,可以用各种分离器,也只需关注一些特定的列。对于所有致力于净化文本,清理掉文本周围所有可能干扰的工作,称之为文本清理。数据再加工(data munging)、文本清理与数据歧义这几个术语之间并没有清晰的界限,在类似的语境中可以相互使用。
语意分离器
在NLP应用中,常常将一大段原生文本分割成一系列的语句,以便从中获取更多的信息,让语句称为一个可用的交流单元。对于英文来说可以用(.)的字符来分割,也有可能是某种预置的分类器进行复杂的语句边界识别:
from nltk.tokenize import sent_tokenize
inputstring='This is examle sent . The sentence splitter will split on ' \
'sent markers . Ohh really !!'
all_sent=sent_tokenize(inputstring)
print(all_sent)
结果:
['This is examle sent .', 'The sentence splitter will split on sent markers .', 'Ohh really !', '!']
我们试着将原始文本字符串分割到一个语句列表中,用预处理函数sent_tokenize(),这是一个内置的在NLTK库中的语句边界检测算法。如需自定义一个语句分离器,也可以用以下方式训练出一个属于自己的语义分离器:
import nltk.tokenize.punkt
tokenizer=nltk.tokenize.punkt.PunktSentenceTokenizer()
该预置语句分类器可支持17中语言,只需为其指定相关的对象。