当前位置:   article > 正文

使用 Python 进行自然语言处理第 3 部分:使用 Python 进行文本预处理_停用词删除表情

停用词删除表情

一、说明

        文本预处理涉及许多将文本转换为干净格式的任务,以供进一步处理或与机器学习模型一起使用。预处理文本所需的具体步骤取决于具体数据和您手头的自然语言处理任务。

        常见的预处理任务包括:

  • 文本规范化——将文本转换为标准表示形式,例如全部小写。
  • 删除停用词、标点符号、特殊单词或文本片段,例如井号标签、URL、表情符号、非 ASCII 字符等。
  • 词干提取——从文本单词中删除后缀
  • 词形化 - 将单词转化为它们的引理形式(引理是字典中存在的单词的形式)。
  • 拼写更正——更正任何拼写错误
  • 通过绘图进行探索性分析

        NLTK、SpaCy 等库提供内置的文本预处理功能。

二、文本预处理

2.1 文本预处理的好处

  • 降维:包含许多单词的文本文档可以表示为多维向量。文档的每个单词都是向量的维度之一。应用文本处理有助于删除对您所针对的实际 NLP 任务可能没有意义的单词,从而减少数据的维度,这反过来又有助于解决维数灾难问题并提高 NLP 任务的性能。

2.2 文本预处理

        下载到您的计算机并将其加载到 pandas 数据框中。如果使用 read_csv(),请使用编码 = 'latin-1'。数据集有很多列,我们只对这篇关于文本预处理的文章的原始推文列感兴趣。

  1. # Read the dataset into a dataframe
  2. import pandas as pd
  3. train_data = pd.read_csv('Corona_NLP_train.csv', encoding='latin-1')
  4. train_data.head()
  5. # Remove the columns not relevant to Text-Preprocessing Task
  6. train_data = train_data.drop(['UserName', 'ScreenName', 'Location', 'TweetAt', 'Sentiment'], axis = 1)
  7. train_data.columns

2.3 小写转换

  1. #1. Case Conversion to Lower Case
  2. train_data['OriginalTweet'] = train_data['OriginalTweet'].str.lower()
  3. train_data.head()

2.4 删除停用词和标点符号

  1. #Remove stop words and punctuation marks
  2. #https://stackoverflow.com/questions/29523254/python-remove-stop-words-from-pandas-dataframe
  3. import nltk
  4. import string
  5. from nltk.corpus import stopwords
  6. stop_words = stopwords.words('english')
  7. stopwordsandpunct = stop_words + list(string.punctuation)
  8. train_data['OriginalTweet'] = train_data['OriginalTweet'].apply(lambda w:' '.join(w for w in w.split() if w not in stopwordsandpunct))
  9. train_data['OriginalTweet']

2.5 删除 URL

  1. # Remove URLs from all the tweets
  2. import re
  3. def remove_url(tweet):
  4. tweet = re.sub(r'\w+:\/{2}[\d\w-]+(\.[\d\w-]+)*(?:(?:\/[^\s/]*))*', '', tweet)
  5. return tweet
  6. train_data['OriginalTweet'] = train_data['OriginalTweet'].apply(remove_url)
  7. train_data['OriginalTweet'].head()

2.6 删除提及和井号标签

  1. # remove mentions and hashtags
  2. def remove_mentions_hashs(tweet):
  3. tweet = re.sub("@[A-Za-z0-9_]+","", tweet) #Remove mentions
  4. tweet = re.sub("#[A-Za-z0-9_]+","", tweet) #Remove hashtags
  5. return tweet
  6. train_data['OriginalTweet'] = train_data['OriginalTweet'].apply(remove_mentions_hashs)
  7. train_data['OriginalTweet'].head()

2.7 删除表情符号

  1. # Removing emojis from tweets
  2. # Source Credit: https://stackoverflow.com/a/49146722/330558
  3. import re
  4. def remove_emojis(tweet):
  5. pat = re.compile("["
  6. u"\U0001F600-\U0001F64F" # emoticons
  7. u"\U0001F300-\U0001F5FF" # symbols & pictographs
  8. u"\U0001F680-\U0001F6FF" # transport & map symbols
  9. u"\U0001F1E0-\U0001F1FF" # flags (iOS)
  10. u"\U00002702-\U000027B0"
  11. u"\U000024C2-\U0001F251"
  12. "]+", flags=re.UNICODE)
  13. return pat.sub(r'', tweet)
  14. train_data['OriginalTweet'] =train_data['OriginalTweet'].apply(remove_emojis)
  15. train_data.head()

2.8 删除非 ASCII 字符

  1. #https://docs.python.org/2/library/unicodedata.html#unicodedata.normalize
  2. import unicodedata
  3. def remove_nonascii(text):
  4. text = unicodedata.normalize('NFKD', text).encode('ascii', 'ignore').decode('utf-8', 'ignore')# apply compatibility decomposition
  5. return text
  6. train_data['OriginalTweet'] = train_data['OriginalTweet'].apply(remove_nonascii)
  7. train_data.head()

2.9 删除空字符串

  1. import string
  2. def remove_empty_strings1(tweet):
  3. tweet = re.sub(r"^\s+|\s+$", 'NaN', tweet)
  4. return tweet
  5. train_data['OriginalTweet'] =train_data['OriginalTweet'].apply(remove_empty_strings1)

2.10 删除主题标签、URL 后删除所有包含 NaN 的行

  1. train_data = train_data[train_data['OriginalTweet'] != 'NaN']
  2. # Now resetting index of Data frame
  3. train_data = train_data.reset_index(drop = True)

三、文本内容预处理

3.1 使用 TextBlob 进行拼写更正

  1. # Spelling correction
  2. import warnings
  3. warnings.filterwarnings("ignore")
  4. from textblob import TextBlob
  5. train_data['SpellCorrectedTweet'] = train_data['OriginalTweet'].apply(lambda x : str(TextBlob(x).correct()))
  6. train_data.head()

3.2 使用 NLTK 的内置 Tokenizer 进行标记化

  1. # Now we will perform tokenization
  2. import nltk
  3. from nltk import word_tokenize
  4. tokenizer = nltk.tokenize.WhitespaceTokenizer()
  5. def tokenize(text):
  6. return tokenizer.tokenize(text)
  7. train_data['OriginalTweet'] = train_data['OriginalTweet'].apply(tokenize)
  8. train_data['OriginalTweet'].head()

3.3 使用 NLTK 的 WordNetLemmatizer 进行词形还原

  1. import nltk
  2. tokenizer = nltk.tokenize.WhitespaceTokenizer()
  3. lemmatizer = nltk.stem.WordNetLemmatizer()
  4. def lemmatize(text):
  5. return [lemmatizer.lemmatize(w) for w in text]
  6. train_data['OriginalTweet'] = train_data['OriginalTweet'].apply(lemmatize)
  7. train_data.head()

3.4 使用 NLTK 的 PorterStemmer 进行词干提取

  1. # Stemming
  2. from nltk.stem import PorterStemmer
  3. stemmer = PorterStemmer()
  4. def stemming(text):
  5. return [stemmer.stem(w) for w in text]
  6. train_data['OriginalTweet'] = train_data['OriginalTweet'].apply(stemming)
  7. train_data.head()

3.5 计算推文中最常见的单词

  1. # Counting most frequent words in tweets
  2. #https://docs.python.org/3/library/itertools.html#itertools.chain
  3. import itertools
  4. import collections
  5. all_tweets = list(train_data["OriginalTweet"])
  6. all_tokens = list(itertools.chain(*all_tweets))
  7. token_counts = collections.Counter(all_tokens)
  8. # Print 10 most common words with their frequency
  9. print(token_counts.most_common(10))
  10. # Convert above words and frequencies to a dataframe
  11. df = pd.DataFrame(token_counts.most_common(20), columns=['Token','Count'])
  12. df.head()
  13. # Plotting frequencies using Matplotlib barplot
  14. import matplotlib.pyplot as plt
  15. plt.rcParams["figure.figsize"] = (12,8)
  16. df.sort_values(by = 'Count').plot.bar(x='Token', y='Count')
  17. plt.title('Most Used Words')
  18. plt.show()

四、总结

        本文总结出关于文本预处理的大多数处理方法。对于文本处理的实际过程,可以抽取某些过程进行整合处理。对于更加特殊的处理也可以特别处理。

        下一篇文章介绍文本表示技术:

使用 Python 进行自然语言处理第 4 部分:文本表示

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/865904
推荐阅读
相关标签
  

闽ICP备14008679号