今天在图书馆查了不少资料,感觉没什么特别好的学习途径。
主要通过博客,李航的《统计学习方法》,相关比赛代码来学习。
首先还是介绍几个名词,一个新领域总是有很多新名词。
Tokenization:将文本转化为tokens的过程
Tokens:在文本里的展示的单词或实体
Text object:一个句子、短语、单词或文章
文本分析也好,平时做的数据挖掘也好,开始都是需要数据预处理。
文本分析点数据预处理的过程主要包括以下三个部分:
噪声移除
词汇规范化
对象标准化
这里我们首先介绍噪声移除。
所谓噪声移除就是把对我们来说没有用的冗余tokens去掉,例如语气词。
PS:在情感分析中,语气词、感叹号是应该保留的,因为他们对表示语气程度、感情色彩有一定的贡献和意义
比较常用的方法是通过先设置好噪音词典,然后遍历一下文本,去除那些被词典标注为噪音的tokens。
写一个噪声移除的函数
#先准备一个噪音词典,记录了你要除掉的tokens。
noise_list=['I','you','me','he','her','they','them','a','an','the','...']
def remove_noise(text):
words=re.split('[, ]',text)
remove_noise_words=[word for word in words if word not in noise_list]
remove_noise_text=' '.join(remove_noise_words)
return remove_noise_text
结果很明确。
要注意的是split和re.split的区别。
re.split可以用多个分隔符分割文本。
split适合于单个分隔符,当需要使用多个分隔的时候,可以逐次使用。
re.split适合多个分隔符,使用起来有两种方式
比如我代码中使用的,words=re.split(’[, ]’,text)
在这里,split的第一个参数,也就是传入分隔符的。
我传入了一个列表,里面有两个元素,逗号和空格。
注意这个列表里每个元素之间没有空格和逗号,因此有空格的话就说明要通过空格分隔。
为了清楚一点,再举一个例子。
re.split("[;,?]")
这个则是实现分号,逗号,问号三个分隔符。
还可以使用正则表达式处理一些特定模式的噪音,
函数:
def remove_regex(input_text,regex_pattern):
urls=re.finditer(regex_pattern,input_text)
for i in urls:
input_text=re.sub(i.group().strip(),'',input_text)
return input_text
调用:
regex_pattern=['#[\w]*','#[\w]','#[\w][\w]']
for regex_patterns in regex_pattern:
result=remove_regex("i #dont like sing jump and rap",regex_patterns)
print(result)
结果:
通过结果大家应该可以看出
regex_pattern=[’#[\w]*’,’#[\w]’,’#[\w][\w]’]
各部分代表的意思。