November 06, 2016

文本分析入门

文本分析 (Text Analytics) 介绍

文本分析/ 文本挖掘 (Text Analytics/ Text Mining) 可以理解成将非结构化数据(unstructured data) 转化成有用数据的过程,其中文本(Text)指的是非结构化数据(unstructured data)。

常见的文本分析方法包括文本特征提取,频率统计,相似度分析,聚类分析,模式识别等。文本分析可以应用于内容分析,关键词提取,信息检索 ,比较对比,内容聚类,情感分析,宣传分析,E-discovery等方面。

和文本分析比较相近的一个概念是自然语言处理(Natural language processing)。自然语言处理是非常复杂的。如下图,自然语言处理中包括词性标注(Lexical Analysis, Part-of-speech tagging) ,语义分析(Semantic Analysis),语法分析 (Syntactic Analysis, Parsing) 和语用分析 (Pragmatic analysis, speech act)。词性标注的准确性可以达到97%,而语法分析的准确性可以达到90%。

形态分析 (Morphology Analysis)

一个单词会有很多形式:比如 apply 还有 applying, applied, applies 等表示。在进行处理的时候,我们希望能将这些单词视为一个单词,这也叫做形态分析 (Morphology Analysis)

需要考虑的是即使是同一个单词,在不同文本中表达的含义不同,比如 Apple 在文中可以指水果,也可以指苹果公司。不过,很少有系统会进行基于内容的形态分析,因为当处理海量文档时,这样做的代价会非常高。

有两种方法进行形态分析:

1. 建立一个单词表。

由于可能有新词产生,单词表需要不断更新。

2. 还原英文原型。

英语单词的后缀一般是固定的,比如’-s’, ‘-ing’, ‘-ed’等,可以将后缀去掉后,还原英文单词原型进行分析。需考虑的是 ’stress’, ‘bring’, ‘bed’ 这些特殊词,并做特殊处理。 具体实现有两种算法:

  • 英文分词 (Porter Stemmer) 算法。此算法会把单词后缀去除,因此还原出来的原型通常不是一个单词,比如 ’police ’和 ‘policed’ 会还原成 ’polic’,’executive’ 和 ’executives’ 会还原成 ’execut’。(代码在此。)

  • KStem 算法。和 Porter Stemmer 算法不同的是,它会返回一个单词,而不是非单词的形式,所以 ’police ’和 ‘policed’ 会还原成 ’police’,’executive’ 和 ’executives’ 还原成 ’executive’。(代码在此。)

应该选择哪种算法呢?都可以,因为两种算法的速度和效率几乎相同。不过,Porter 算法处理后的单词库会比 KStem 大;另外,Porter 算法处理后往往得到的不是一个完整的单词,而 KStem 得到的单词形式往往在外人看来更清晰。

频率分析 (Frequency Analysis)

在进行频率分析的时候,我们需要从以下几个方面进行考虑:

1. 词频统计 (Statistical Properties of text, Term Frequency)

词频统计的英文是Term Frequency,简称 TF。单词的出现频率遵循 Zipf’s law,用课上一个简单的图表示是这样的:

有一小部分词的词频非常高,而长长的尾巴中有很多只出现了一两次的词。只有中间的一部分词语是我们需要的关键词(keyword,也叫 concept list/ feature vector,H.P. Luhn, 1956)。

2. 停用词 (Stop Words)

Stop words,中文翻译为停用词,是指英文中使用频率很高的单词,它们包含一些功能词和虚词(冠词、介词),比如 a, an, as, for, in, of, the, to,也包含一些常用动词,常用副词,常用形容词等。停用词表通常很短,可以在网上找到英文停用词表,也可以使用 Apache Lucene 的 StopFilter API,代码在此

在做词频统计的时候,停用词需要从文档中移除。移除停用词可以大大降低文本大小,同时可以提高词频统计准确性。但是移除停用词也带来了副作用:有的时候停用词是文本中有意义的词。比如 to be or not to be,虽然这几个词都是停用词,但是当它们连起来当做搭配使用,比较好的做法是不要将它们去除掉。

3. 短语 (Phrases)

有的时候一个单词是以短语的形式出现的,所以我们需要将短语视为一个整体进行频率分析。有两种方法:

  • N-Gram:指将文本中连续出现的n个词语视为一个整体。N-gram包含2-gram (bigram),3gram (trigram)等等,比如United States是2-gram,而United States of American是3-gram (or 4-gram?)。

  • 词性标注 ( Part-of-Speech Tagging, POS):指为词语标注词性的过程。可以使用 Stanford Log-linear Part-Of-Speech Tagger

4. 实体 (Entities)

Named Entities是指各种名字,比如公司名 (Company names),人名 (People names),组织名称 (Organisation names),地址 (Location names),产品名称 (Product names),等等。可以使用 NER (The Stanford Named Entity Recognizer) 进行处理。

关键词提取 (Keyword Abstraction)

接下来可以进行关键词提取了。关于关键词提取,有一个经典算法,叫做 TF-IDF。可以参考阮一峰老师博客中的这篇这篇文章,以及吴军老师《数学之美》中的这篇这篇文章。

不过,在课上老师没有讲到这个算法。而是通过上述内容,介绍了一个简单的关键词提取方法。

然而这个大坑,有心情我再补上。

comments powered by Disqus