自然语言处理-数据预处理

作为应用统计专业的研究生,我参加了一些数据分析项目。 我最喜欢的主题之一是NLP。 由于数据的特性,我们无法使用典型的方法来处理此类数据。 从预处理,模型构建到最终分析,我们需要一些特殊的技术来处理它们,例如正则表达式,标记,主题建模,RNN。


代币化

在本节中,我将分享一些预处理方法。 标记化和词干提取是两种常见的技术。 众所周知,NLTK是处理人类语言数据的有用软件包,send_tokenize和word_tokenize可以将字符串分解为单词和句子。 通过find,rfind函数,我们还可以获得用于切片字符串的索引值。 要处理HTML文档的形式,我们可以首先使用Web浏览器将页面另存为文本,然后使用BeautifulSoup提取文本。 要读取本地文件,我们可以使用Python内置函数open(),然后使用read()方法。 为了从pdf,MSWord和其他二进制格式中提取文本,第三方软件包(例如pypdf,pywin32)提供了对这些格式的访问。

正则表达式可用于执行更多操作,例如提取单词片段,查找词干,搜索标记化文本。 在以下示例中,我们从字符串中提取元音,并在单词后缀后缀。

在此示例中,我们使用正则表达式查找一个男人的所有形容词,例如“一个受困的男人”,“一个紧张的男人”。

总之,我们可以使用urlopen(),BeautifulSoup来获取网页的标题和内容。

然后,使用NLTK标记该段落。


量化

向量化是文本数据预处理的另一项重要技术。 如果我们的模型是统计或机器学习算法,则不能将符号序列直接输入模型。 他们中的大多数期望数值特征向量。 通过计算出现频率,对令牌进行归一化和加权,我们可以将字符串特征转换为数字特征。

该方法背后的想法很简单。 我们首先定义一个固定长度的向量,其中每个条目对应于我们预定义词典中的一个单词。 向量的大小等于字典的大小。 我们计算字典中每个单词出现在句子中的频率,然后将数字放入相应的向量条目中。 例如,如果字典中包含{“ I”,“ love”,“ dog”,“ cat”,“ math”},而我们想对句子“ I love math”进行矢量化处理,则矢量应为[1,1, 0,0,1]。 这种策略也被称为“言语袋”。

为了改善表示,我们可以使用TF-IDF,它表示“术语频率-反数据频率”。 此分数包含两个部分,即TF和IDF。 TF给出了语料库中每个文档中单词的出现频率。 它是单词在文档中出现的次数与该文档中单词总数的比率。 随着文档中该单词出现次数的增加,它也会增加。 IDF用于计算语料库中所有文档中稀有词的权重。 在语料库中很少出现的单词具有较高的IDF分数。 结合两者,我们得出一个单词的TF-IDF分数。

进一步的预处理方法-词嵌入

除了传统的单词袋之外,单词嵌入是文档词汇的有力代表。 正如我们可以看到的,当语料库很大时,像高维向量,稀疏特征之类的词袋有一些限制。 单词嵌入是低维向量中的密集特征,低维向量是特定单词的向量表示。 它能够捕获文档中单词的上下文,与其他单词的语义和句法相似性。 Word2Vec是构建向量空间的一项重要技术。 我们可能会在下面的文章中对此进行更多讨论。