【Stanford - Speech and Language Processing 读书笔记 】2、Regular Expression,Text Normalization,Edit distance

1、Introduction

正则表达式(regular expression):模式匹配,用于从文本中抽取特殊的词句。

文本规范化(text normalization) :将文本转化为更为方便、规范的格式,其中包括词标记化(word tokenization)、词形还原(lemmatization)、词干化(stemming)、语句分割(sentence segmenting)。

编辑距离(edit distance):度量两个词语相似程度的一种衡量指标,根据一个词语对字母的删除、插入、替换操作的次数来计算编辑距离。

 

2、Regular Expression

基本规则:

1、大小写敏感(case sensitive)

 

2、字符析取(disjunction of characters)

 

 3、范围(range)

 

 4、否定(negation): ^直接位于方括号 [ 之后

 

 5、问号(question mark): ? 表示前面的字符或什么都没有

 

 6、重复

*  : 前面的字符重复0次或若干次

+ :前面的字符重复1次或若干次

例如 / [ 0 - 9 ] [ 0 - 9] * / 和 / [ 0 - 9 ] + / 均表示一个自然数

 

7、通配符(wildcard):  代替任何单个字符(除了回车)

 

 8、锚定表达式(anchors)

 

 例如 / ^ The dog\. $ / 表示一个句子 The dog.

 

9、析取(disjunction): disjunction operator / pipe symbol - |

例如 / cat | dog / 匹配 cat 或 dog

 

10、分组(grouping):括号()具有最高优先级

例如 / guppy | ies / 匹配 guppy 或 ies ;  / gupp ( y | ies ) / 匹配 guppy 或 guppies

 

11、优先级(precedence)

 

 12、更多

 

 

 

 

 

 13、替换,捕获组(Substitution, Capture Groups)

替换操作符如 s/regexp1/pattern/ 可以让一个正则表达式被另一个表达式替换,常常在python或Unix命令(vim或sed)中使用

数字符号 \1 可以 参考之前括号内的,如 s/([0-9]+)/<\1>/ 可以在数字外面加上括号, /the (.*)er they were, the \1er they will be/ 等等

捕获组: 如 /the (.*)er they (.*), the \1er we \2/ ;  \1 对应第一个括号内的,\2对应第二个括号内的。它可以匹配the faster they ran, the faster we ran,但不能匹配faster they ran, the faster we ate。 \3, \4...同理

如果某个模式不希望被捕获,可以使用 / ? : pattern /  ,它称为non-capturing group。  例如/(?:some|a few) (people|cats) like some \1/  可以匹配some cats like some cats 而非 some cats like some a few

 

14、先行断言(lookahead assertions)

利用(?运算符——  如果模式出现,运算符 (?= pattern) 为真,但宽度为零,即匹配指针不前进;运算符(?!模式)仅在模式不匹配时返回 true,但同样为零宽度,并且匹配指针不前进。

负前瞻通常用于以下情况,正在解析一些复杂的模式,但想排除特殊情况。例如  假设我们想在一行的开头匹配任何不以“Volcano”开头的单词:

/ ˆ (?!Volcano) [A-Za-z]+ /

 

3、Word and Copora

词的定义? 是否算上标点,是否算上停顿、结巴导致的语气词,词与词根? —— 根据不同的任务而定

几个术语: lemma : 具有相同词干、相同的主要词性和相同的词义的一组词, 如cat和cats

                   wordform : 单词的完整变形或派生形式

                   word tokens : 文本中单词的个数(相同的单词也重复计入),数量用N表示

      word types : 文本中不同的单词个数(每一种单词仅记一次),数量用|V| 表示

 

 Herdan’s Law (Herdan, 1960) or Heaps’ Law (Heaps, 1978): 

 

 一般地,\beta在0.67-0.75之间

语料库(Copera): 具有多样性(语言、体裁、作者、时代……)

语言是随情境而改变的,当在一个语料库中创建模型时,需要考虑语料库的某些细节,如语言、目的、出处等。

所以,建议语料库的创建者制作一个数据表,包括例如:

动机、情境、语言、演讲者的描述与统计、收集过程、注解过程、版权和产权  等等

 

4、Text Normalization

 

4.1  词标记化(word tokenization): 将文本标记为一个个单词

 

简陋的方法——Unix工具,包括命令tr(单词转换,例如大小写),sort(按首字母排序),uniq(合并相同的单词并计数)

例如对莎士比亚的一片文章执行如下命令:

 

 

更为精细的方法,应该要做到:

1、对标点的处理——逗号、句号常常是分段的标志,但也有可能在单词内(如 Mr.)

2、扩写缩写单词,如 we' re -> we are

3、命名实体识别,如 New York

 

一些语言如汉语、日语、泰语,使用的文字而非单词, 常常使用神经序列模型(neural sequence model)

 

字节对编码(byte-pair encoding for tokenization)

对于未知单词问题,引入子词(subword)——比标记词还要短小

字节对编码算法:

1、检测语料库

2、选择相邻次数最多的两个元素

3、合并这两个元素,并将其替代原来的元素

4、返回1,持续检测、计数、合并,直到合并k(参数)次产生k个新元素

如下例子:

  

       

 

 

4.2 词标准化(word normalization)

将词语转化为标准形式, 为具有多个形式的词选择单一的形式。

应用:信息恢复(information retrieval), 信息抽取(information extraction)

 

字符折叠(case folding)

大写字母转小写

广泛应用于信息恢复、语音识别(speech recognition)

也不总是适用,如情感分析(sentiment analysis)、文本分类(text classification)等

 

词形还原(Lemmatiziation)

觉得具有相同词根的两个单词,如 be/am/is/are、dinners/dinner

方法:形态解析(morphological parsing)  对语素(morpheme)的研究  —— 1、词干(stem)  2、词缀(affixes)

一种比较粗糙的算法——The Porter Stemming

该算法基于串联运行的一系列重写规则,作为级联,其中每次传递的输出作为输入提供给下一次传递,规则的例子如下:

 

 算法应用于如下的段落:

 

 算法可能出现过泛化或欠泛化的错误

 

 

4.3 句子分割

有力的工具——标点符号

但有时标点的作用是模糊的,例如Mr.

为解决这类问题,可以结合词标准化和句子分割; 也可以使用某些特殊的字典

 

5、Minimum Edit Distance

编辑距离(edit distance),用于衡量两个字符串的相似程度

 

策略:计算从一个字符串转变为另一个字符串所需要的最小操作(插入, 删除, 替换)次数。

这里插入, 删除, 替换可以赋不同的代价(距离),一般地插入, 删除, 替换的代价分别为1,1,1或1,1,2

例如下图,用上述两种距离代价计算的编辑距离分别为5和8

 

 

 

算法:动态规划

给定两个字符串,长度为 n 的源字符串 X 和长度为 m 的目标字符串 Y,我们将 D[i, j] 定义为 X[1..i] 和 Y[1.. j] 之间的编辑距离 , 即 X 的前 i 个字符和 Y 的前 j 个字符。因此 X 和 Y 之间的编辑距离为 D[n,m]。采用如下算法:

 

当插入、删除代价为1, 替换插入代价为2:

 

 

 

算法伪代码:

 

 直观的例子:

 

posted @ 2021-10-29 09:59  鱼儿冒个泡  阅读(164)  评论(0编辑  收藏  举报