input_str = """
There are some people who think love is sex
And marriage
And six o'clock-kisses
And children,
And perhaps it is,
Miss Lester.
But do you know what I think?
I think love is a touch and yet not a touch
"""
input_str = input_str.lower()
print(input_str)
结果如下:9 X! @* {0 O. z
# z! l6 J; X, U+ u0 p3 @ 2、删除或者提取文本中出现的数字 $ p( j7 B6 v+ G# D# r 如果文本中的数字与文本分析无关的话,那就删除这些数字。2 N' ]. f8 J4 G( d9 q9 q# J5 n$ x# w
结果如下:( A- m; M) c# K/ S- ]& ` $ c" N P) _3 O& t' d 可以看到文本中乱七八糟的符号都被滤除了,用正则表达式过滤文本中的标点符号,如果空白符也需要过滤,可以使用 r'[^\w]'。原理很简单:在正则表达式中,\w 匹配字母或数字或下划线或汉字(具体与字符集有关),^\w表示相反匹配。 3 P. T+ ?3 d% r s' F4 m4、删除两端无用的空格 ; h+ n, ]/ h9 x6 y6 v
# 从Github下载停用词数据 https://github.com/zhousishuo/stopwords
import jieba
import re
# 读取用于测试的文本数据 用户评论
with open('comments.txt') as f:
data = f.read()
# 文本预处理 去除一些无用的字符 只提取出中文出来
new_data = re.findall('[\u4e00-\u9fa5]+', data, re.S)
new_data = "/".join(new_data)
# 文本分词 精确模式
seg_list_exact = jieba.cut(new_data, cut_all=False)
# 加载停用词数据
with open('stop_words.txt', encoding='utf-8') as f:
# 获取每一行的停用词 添加进集合
con = f.read().split('\n')
stop_words = set()
for i in con:
stop_words.add(i)
# 列表解析式 去除停用词和单个词
result_list = [word for word in seg_list_exact if word not in stop_words and len(word) > 1]
result_list
结果如下: \4 F9 i" n. ~4 q9 ?( `" K: c7 v4 g
0 h& f% b* n: Q7 _/ A- O* R! K
首先读取用于测试的文本数据,该数据是爬取的商品评论,这一类数据通常有很多无意义的字词和符号,通过正则表达式滤除掉无用的符号,只提取出中文出来。使用 jieba 库进行文本分词,加载停用词数据到集合,然后一行列表解析式滤除停用词和单个词,这样效率很高。停用词数据可以下载一些公开的,再根据实际文本处理需要,添加字词语料进去,使滤除效果更好。 + p- R1 w" B& S' kGithub下载停用词数据:https://github.com/zhousishuo/stopwords5 A, X5 z: g* O3 L" @
SnowNLP是一个 Python 写的类库,可以方便的处理中文文本内容,是受到了 TextBlob 的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和 TextBlob 不同的是,这里没有用NLTK,所有的算法都是自己实现的,并且自带了一些训练好的字典。注意本程序都是处理的 unicode 编码,所以使用时请自行 decode 成 unicode 编码。 2 J6 z, {/ V8 [ |- z 使用 SnowNLP 处理中文文本数据非常方便,以词性标注和关键词提取为例: 0 U9 s2 W4 }& M$ G( Z. S. |