为什么要标记/预处理单词以进行语言分析?



我目前正在开发一个Python推文分析器,其中一部分将是计算常用词。我已经看过许多关于如何做到这一点的教程,并且大多数在进一步分析之前对文本字符串进行标记。

当然,避免这个预处理阶段并直接从字符串中计算单词会更容易 - 那么为什么要这样做呢?

也许我说得太对了,但标记化不是简单地指根据分隔符拆分输入流(在这种情况下是字符(以接收任何被视为"令牌"的内容吗?

您的标记可以是任意的:您可以在单词级别执行分析,其中标记是单词,分隔符是任何空格或标点字符。您分析n-grams的可能性也一样大,其中您的标记对应于一组单词,并且通过滑动窗口来完成定界。

简而言之,为了分析文本流中的单词,您需要标记化以接收要操作的"原始"单词。

然而,标记化之后通常伴随着词干提取和词形还原以减少噪音。在考虑情感分析时,这一点变得非常清楚:如果您看到代币happyhappilyhappiness,您是否想将它们分别处理,或者您宁愿将它们组合到三个happy实例中,以更好地传达更强烈的"快乐"概念?

需要这种方法,以便能够分辨哪个单词占向量中以数字方式表示字符串的哪个维度。此外,它有时使用额外的编辑,例如小写单词和删除标点符号。让我们看一下以下示例:

from collections import Counter
import re
sentence = 'This is just some sentence, which is nice.'
tokens = sentence.split(' ')
tokens = [re.sub(r'[,.]', '', t).lower() for t in tokens]
print(Counter(tokens))
# Output:
#   Counter({'is': 2, 'just': 1, 'nice': 1, 'sentence': 1, 'some': 1, 'this': 1, 'which': 1})

第一个句子被拆分为一个列表,符号,.被删除,并确保字符串是小写的。接下来是通过Counter数单词。您可以将此结果解释为向量[2 1 1 1 1 1 1](2表示is1单词just等(。如果你的字典越来越大,因为你使用的是更大的语料库,向量变得越来越稀疏,这意味着它们包含越来越多的零,并且其中包含的信息可以以更压缩的方式存储。

因此,如果你有一个想要用数字表示的句子,则需要首先创建一个语料库的字典,就像上面用一个句子所做的那样,这样你就可以分辨出哪个词代表哪个维度。

您可以尝试以半结构化数据格式(如 JSON(表示上述数据,但会发现这本身并不是数据的压缩良好表示形式。这种方法可以与在加载之前或保存后(取消(压缩数据相结合,但这会导致多次性能损失,而构建字典只会产生一次性成本。

尝试使用这句话:

text = "We like the cake you did this week, we didn't like the cakes you cooked last week"

直接计数,无需 nltk 令牌:

Counter(text.split())

返回:

Counter({'We': 1,
'cake': 1,
'cakes': 1,
'cooked': 1,
'did': 1,
"didn't": 1,
'last': 1,
'like': 2,
'the': 2,
'this': 1,
'we': 1,
'week': 1,
'week,': 1,
'you': 2})

我们看到我们对结果不满意。 did 和 not(这是 did not 的收缩(算作不同的词,"周"和"周"也是如此。

当您使用 nltk 进行标记化时,这是固定的(拆分实际上是一种天真的标记方式(:

Counter(nltk.word_tokenize(text))

返回

Counter({',': 1,
'We': 1,
'cake': 1,
'cakes': 1,
'cooked': 1,
'did': 2,
'last': 1,
'like': 2,
"n't": 1,
'the': 2,
'this': 1,
'we': 1,
'week': 2,
'you': 2})

如果要算作同一个词"蛋糕"和"蛋糕",也可以进行词形还原:

Counter([lemmatizer.lemmatize(w).lower() for w in nltk.word_tokenize(text)])

返回

Counter({',': 1,
'cake': 2,
'cooked': 1,
'did': 2,
'last': 1,
'like': 2,
"n't": 1,
'the': 2,
'this': 1,
'we': 2,
'week': 2,
'you': 2})

标记化是在文本处理中理解词典/词汇的一种简单方法。

分析文本中的语言或模式的基本第一步是删除符号/标点符号和停用词。通过标记化,您可以拆分大块文本来识别和删除可能不会增加价值的文本,在许多情况下,诸如"the","a","and"等停止词在识别感兴趣的单词方面没有增加太多价值。

单词频率在理解文本中单词的用法方面也很常见,谷歌的Ngram允许语言分析,并绘制出单词多年来的流行度/频率。如果不对字符串进行标记化或拆分,您将没有计算文本中出现的单词的基础。

标记化还允许您运行更高级的分析,例如标记词性或为某些单词分配情绪。同样对于机器学习,文本大多经过预处理,以将它们转换为用于神经网络不同层的数组。如果不进行标记化,则输入将过于不同,无法运行任何分析。

相关内容

  • 没有找到相关文章

最新更新