赞
踩
在进行自然语言处理(NLP)任务之前,通常需要对文本进行清理和预处理,以便提高模型的性能和准确性。以下是一般的文本清理流程:
去除特殊字符和标点符号:删除文本中的特殊字符、标点符号和非字母数字字符,如@、#、$等。
转换为小写:将文本中的所有字母转换为小写,以避免大小写的差异。
分词:将文本分割成单词或子词的序列。分词可以使用现有的分词工具库,如NLTK、spaCy等。
去除停用词:去除常见的停用词,如“a”、“the”、“is”等,这些词对于大多数NLP任务来说没有太多的信息量。
词形还原(Lemmatization):将单词还原为其基本形式,如将“running”还原为“run”,以减少词汇的变体。
去除数字:删除文本中的数字,除非数字对于特定任务有重要意义。
去除多余的空格:删除文本中多余的空格,只保留单词之间的一个空格。
去除HTML标签(如果有):如果文本中包含HTML标签,可以使用正则表达式或相关工具库将其去除。
去除URL链接:删除文本中的URL链接,因为它们通常不包含有用的信息。
去除特定领域的词汇(可选):根据具体任务的需求,可以去除特定领域的词汇,如领域专有名词、特定术语等。
- import re
- import nltk
- from nltk.corpus import stopwords
- from nltk.stem import WordNetLemmatizer
- import jieba
-
- stopword = stopwords()
- def text_cleanup(text,stopword):
- # 将文本转换为小写并去除多余空格
- text = text.lower().strip()
- # 去除特殊字符和标点符号
- text = re.sub(r'[^a-zA-Z0-9\s]', '', text)
-
- # 去除HTML标签
- text = re.sub(r'<[^>]*>', '', text)
- # 去除URL链接
- text = re.sub(r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', '', text)
- # 词干提取或词形还原(假设使用NLTK库进行词形还原)
- lemmatizer = WordNetLemmatizer()
- text = ' '.join(lemmatizer.lemmatize(word) for word in text.split())
-
- # 分词
- tokens = nltk.word_tokenize(text)
- # 去除停用词
- stop_words = set(stopword.words("english"))
- tokens = [word for word in tokens if word not in stop_words]
-
- # 标记化(假设简单地按照空格进行分割)
- tokens = text.split()
- # 清除空白字符
- tokens = [token.strip() for token in tokens]
- # 去除数字
- tokens = [token for token in tokens if not token.isdigit()]
- return tokens
这里的停用词表是英文的词表,如果需要中文的可以下载中文的停用词表,然后做相同其他的清洗操作:
- with open('hitstopword.txt','r',encoding='utf-8') as f:
- stop_words = f.read().splitlines()
- def ch_text_cleanup(text,stop_words):
- words = jieba.lcut(text)
- filtered_words = []
- for word in words:
- if word not in stop_words:
- filtered_words.append(word)
- return filtered_words
停用词表我用的哈工大的词表,可以向里面加入自己根据具体任务规定的停用词,这个词表网上找一下应该能找到,也有其他的停用词表。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。