过滤标点符号附近的停用词
filtering stopwords near punctuation
我正在尝试像这样过滤掉文本中的停用词:
clean = ' '.join([word for word in text.split() if word not in (stopwords)])
问题是 text.split()
有像 'word.'
这样的元素与停用词 'word'
不匹配。
我后来在 sent_tokenize(clean)
中使用了 clean
,所以我不想完全去掉标点符号。
如何在 保留标点符号 的同时过滤掉停用词,但过滤掉像 'word.'
这样的词?
我认为可以更改标点符号:
text = text.replace('.',' . ')
然后是
clean = ' '.join([word for word in text.split() if word not in (stop words)] or word == ".")
但是有没有更好的方法呢?
你可以使用这样的东西:
import re
clean = ' '.join([word for word in text.split() if re.match('([a-z]|[A-Z])+', word).group().lower() not in (stopwords)])
这将提取除小写和大写 ascii 字母以外的所有内容,并将其与 stopcase
集合或列表中的单词匹配。此外,它假设停用词中的所有单词都是小写的,这就是我将单词转换为全部小写的原因。如果我做出了很大的假设,请将其删除
此外,我不精通正则表达式,如果有更简洁或更可靠的方法,我深表歉意。
首先对文本进行分词,然后从停用词中清除它。分词器通常可以识别标点符号。
import nltk
text = 'Son, if you really want something in this life,\
you have to work for it. Now quiet! They are about\
to announce the lottery numbers.'
stopwords = ['in', 'to', 'for', 'the']
sents = []
for sent in nltk.sent_tokenize(text):
tokens = nltk.word_tokenize(sent)
sents.append(' '.join([w for w in tokens if w not in stopwords]))
print sents
['Son , if you really want something this life , you have work it .', 'Now quiet !', 'They are about announce lottery numbers .']
我正在尝试像这样过滤掉文本中的停用词:
clean = ' '.join([word for word in text.split() if word not in (stopwords)])
问题是 text.split()
有像 'word.'
这样的元素与停用词 'word'
不匹配。
我后来在 sent_tokenize(clean)
中使用了 clean
,所以我不想完全去掉标点符号。
如何在 保留标点符号 的同时过滤掉停用词,但过滤掉像 'word.'
这样的词?
我认为可以更改标点符号:
text = text.replace('.',' . ')
然后是
clean = ' '.join([word for word in text.split() if word not in (stop words)] or word == ".")
但是有没有更好的方法呢?
你可以使用这样的东西:
import re
clean = ' '.join([word for word in text.split() if re.match('([a-z]|[A-Z])+', word).group().lower() not in (stopwords)])
这将提取除小写和大写 ascii 字母以外的所有内容,并将其与 stopcase
集合或列表中的单词匹配。此外,它假设停用词中的所有单词都是小写的,这就是我将单词转换为全部小写的原因。如果我做出了很大的假设,请将其删除
此外,我不精通正则表达式,如果有更简洁或更可靠的方法,我深表歉意。
首先对文本进行分词,然后从停用词中清除它。分词器通常可以识别标点符号。
import nltk
text = 'Son, if you really want something in this life,\
you have to work for it. Now quiet! They are about\
to announce the lottery numbers.'
stopwords = ['in', 'to', 'for', 'the']
sents = []
for sent in nltk.sent_tokenize(text):
tokens = nltk.word_tokenize(sent)
sents.append(' '.join([w for w in tokens if w not in stopwords]))
print sents
['Son , if you really want something this life , you have work it .', 'Now quiet !', 'They are about announce lottery numbers .']