搜索引擎:简单文档词条化与语料处理(Python/Java)

搜索引擎:文档词条化与语料处理

词条化:将给定的字符串拆分成一系列子序列的过程,其中每个子序列称为一个词条(token)

用户在搜索引擎中的输入,应当经过词条化处理后再传入后端进行检索。

(1) 符号清除

Python

python的string模块下的 punctuation 包含所有的英文标点符号

利用Python自带的字符串置换方法 就能够完成符号的清除。

punctuation_string = string.punctuation
lines = re.sub('[{}]'.format(punctuation_string), " ", text)
输入 'I believe you!And you?'
输出 'I believe you And you '

JAVA

利用正则表达式与JAVA字符串的替换

Matcher m = Pattern.compile("[\n`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。, ·、?]").matcher(text);
String newtext = m.replaceAll("").trim();
(2) 大小写转换

Python

单词’Apple’与‘apple’应当视作同一词项 我们统一处理为小写

扫描二维码关注公众号,回复: 14831764 查看本文章
string = string.lower()
输入 'I believe you And you '
输出 'i believe you and you '

JAVA

String text = text.toLowerCase()
(3) 英文切片

Python

不同于中文切片的繁琐 英文单词本身就带有自然的分隔符。

lsplit = lines.split()
输入 'i believe you and you '
输出 ['i', 'believe', 'you', 'and', 'you']

JAVA

Arrays.toString(text.split(" "))
(4) 移除停用词

过于常见的词汇在文档和用户需求进行匹配时价值并不大,需要彻底从词汇表中去除。

Python

一些极为常用的词项 如‘you’,‘I’,'and’被视作停用词

因其频率过高 在任何文档内都极容易出现 因此去除对它们的统计。

en_stop = get_stop_words('en')
stopped_tokens = [i for i in token if i not in en_stop]
输入 ['i', 'believe', 'you', 'and', 'you']
输出 ['believe', 'really', 'wait']
(5) 词干提取

因为语言的不同语法要求,文档中常常包含某一词汇的不同形态,

我们检索某一词汇时,包含了该单词的其他形态的文档,也应当被返回。
在这里插入图片描述

单词’believes’与‘believe’应当视作同一词项,我们统一提取为同一词干

词干并不一定是正确符合语法的单词,它只是为使不同词语成为同一形式。

Python

p_stemmer = PorterStemmer()
texts = [p_stemmer.stem(i) for i in stopped_tokens]
输入 ['believe', 'really', 'wait', 'believes']
输出 ['believ', 'realli', 'wait', 'believ']

JAVA

 PorterStemmer stem = new PorterStemmer();
 stem.setCurrent("happyness");
 stem.stem();
 String result = stem.getCurrent();
(6) 去除重复

构成词项词典的词条不应重复 进行简单的去重操作

word_list = list(dict.fromkeys(word_list))
输入 ['believ', 'realli', 'wait', 'believ']
输出 ['believ', 'realli', 'wait']

猜你喜欢

转载自blog.csdn.net/yt266666/article/details/127427285