当前位置:   article > 正文

文本预处理(text preprocess)总结

文本预处理

在任何机器学习任务中,清理(cleaning )或预处理(preprocessing)数据与模型构建同样重要,甚至更重要。 当涉及文本等非结构化数据时,这个过程就更加重要。

1. 小写化(Lower Casing)

小写是一种常见的文本预处理技术。 这个想法是将输入文本转换为相同的大小写格式,以便以相同的方式处理 'text'、'Text' 和 'TEXT'。

  1. def lower_casing(self, text):
  2. return text.lower()

2. 删除标点符号(Removal of Punctuations)


另一种常见的文本预处理技术是从文本数据中删除标点符号。 这又是一个文本标准化过程,将有助于处理“hurray”和“hurray!” 以同样的方式。

  1. # PUNCT_TO_REMOVE = """!"#$%&\'()*+,-./:;<=>?@[\\]^_{|}~`‘"""
  2. def remove_punctuation(self, text):
  3. return text.translate(str.maketrans('', '', self.PUNCT_TO_REMOVE))

3. 删除停用词(Removal of stopwords)


停用词是语言中常见的单词,如“the”、“a”等。 大多数时候它们可以从文本中删除,因为它们不为下游分析提供有价值的信息。 在像词性标记这样的情况下,我们不应该删除它们,因为它们提供了有关 POS 的非常有价值的信息。

  1. def remove_stopwords(self, text):
  2. """custom function to remove the stopwords"""
  3. return " ".join([word for word in str(text).split() if word not in self.STOPWORDS])

4. 删除常用词(Removal of Frequent words)


在前面的预处理步骤中,我们根据语言信息删除了停用词。 但是,如果我们有一个特定领域的语料库,我们可能还会有一些对我们来说不太重要的频繁出现的单词。

所以这一步就是去除给定语料库中的频繁出现的单词。 如果我们使用 tfidf 之类的东西,就会自动解决这个问题。

  1. from collections import Counter
  2. cnt = Counter()
  3. for text in df["text"].values:
  4. for word in text.split():
  5. cnt[word] += 1
  6. cnt.most_common(10)

5. 删除不经常用的词(Removal of Rare words)


这与之前的预处理步骤非常相似,但我们将从语料库中删除稀有单词。

  1. n_rare_words = 10
  2. RAREWORDS = set([w for (w, wc) in cnt.most_common()[:-n_rare_words-1:-1]])
  3. def remove_rarewords(text):
  4. """custom function to remove the rare words"""
  5. return " ".join([word for word in str(text).split() if word not in RAREWORDS])
  6. df["text"] = df["text"].apply(lambda text: remove_rarewords(text))

6. 词干提取(Stemming)


词干提取是将词形变化(或有时派生)的单词还原为其词干、词根或词根形式的过程

例如,如果语料库中有两个单词walks和walking,那么词干提取就会对后缀进行词干处理,使它们成为walking。 但在另一个例子中,我们有两个单词 console 和 consoling,词干分析器将删除后缀并使它们成为 consol,这不是一个正确的英语单词。

有多种类型的词干算法可用,其中最著名的一种是广泛使用的 porter 词干分析器。 我们可以使用 nltk 包来实现同样的目的。

  1. # self.stemmer = PorterStemmer()
  2. def stem_words(self, text):
  3. return " ".join([self.stemmer.stem(word) for word in text.split()])

7. 词形还原(Lemmatization)


词形还原与词干提取类似,将词形变化的单词减少到词干,但不同之处在于它确保词根(也称为词条)属于该语言。

因此,这一过程通常比词干提取过程慢。 因此,根据速度要求,我们可以选择使用词干提取或词形还原。

让我们使用 nltk 中的 WordNetLemmatizer 来对句子进行词形还原

  1. # self.lemmatizer = WordNetLemmatizer()
  2. def lemmatize_words(self, text):
  3. return " ".join([self.lemmatizer.lemmatize(word) for word in text.split()])

8. 删除表情符号(Removal of Emojis)


随着社交媒体平台的使用越来越多,表情符号在我们日常生活中的使用也呈爆炸式增长。 也许我们可能需要删除这些表情符号以进行一些文本分析。

感谢这段代码,请在下面找到一个辅助函数,从我们的文本中删除表情符号。

  1. # Reference : https://gist.github.com/slowkow/7a7f61f495e3dbb7e3d767f97bd7304b
  2. def remove_emoji(string):
  3. emoji_pattern = re.compile("["
  4. u"\U0001F600-\U0001F64F" # emoticons
  5. u"\U0001F300-\U0001F5FF" # symbols & pictographs
  6. u"\U0001F680-\U0001F6FF" # transport & map symbols
  7. u"\U0001F1E0-\U0001F1FF" # flags (iOS)
  8. u"\U00002702-\U000027B0"
  9. u"\U000024C2-\U0001F251"
  10. "]+", flags=re.UNICODE)
  11. return emoji_pattern.sub(r'', string)
  12. remove_emoji("game is on
    声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/533922
    推荐阅读
    相关标签