如何构建一个系统,用于从非结构化的文本中提取结构化的信息和数据?哪些方法使用这类行为?哪些语料库适合这项工作?是否可以训练和评估模型?
信息提取,特别是结构化信息提取,可以类比数据库的记录。对应的关系绑定了对应的数据信息。针对自然语言这类非结构化的数据,为了获取对应关系,应该搜索实体对应的特殊关系,并且用字符串、元素等一些数据结构记录。
实体识别:分块技术
比如:We saw the yellow dog ,按照分块的思想,会将后三个词语分到NP中,而里面的三个词又分别对应 DT/JJ/NN;saw 分到VBD中;We 分到NP中。对于最后三个词语来说,NP就是组块(较大的集合)。为了做到这点,可以借助NLTK自带的分块语法,类似于正则表达式,来实现句子分块。
分块语法的构建
注意三点即可:
- 基本的分块:组块 :{组块下的子组块}
(类似于:"NP: {<DT>?<JJ>*<NN>}"
这样的字符串)。而?*+保存了正则表达式的意义。
import nltk
sentence = [('the','DT'),('little','JJ'),('yellow','JJ'),('dog','NN'),('brak','VBD')]
grammer = "NP: {<DT>?<JJ>*<NN>}"
cp = nltk.RegexpParser(grammer) #生成规则
result = cp.parse(sentence) #进行分块
print(result)
result.draw() #调用matplotlib库画出来
- 可以为不包括再大块中的标识符序列定义一个缝隙:
}<VBD|IN>+{
import nltk
sentence = [('the','DT'),('little',