Python 过滤标点附近的停止词

Python 过滤标点附近的停止词,python,nlp,nltk,Python,Nlp,Nltk,我正在尝试过滤文本中的停止词,如下所示: clean = ' '.join([word for word in text.split() if word not in (stopwords)]) 问题是text.split()中有类似'word.的元素,这些元素与stopword'word'不匹配 但是,我后来在sent\u tokenize(clean)中使用了clean,因此我不想完全去掉标点符号 如何在保留标点符号的同时过滤掉停止词,而过滤像“word.” 我认为可以更改标点符号: te

我正在尝试过滤文本中的停止词,如下所示:

clean = ' '.join([word for word in text.split() if word not in (stopwords)])
问题是
text.split()
中有类似
'word.
的元素,这些元素与stopword
'word'
不匹配

但是,我后来在
sent\u 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
集合或列表中的单词相匹配。另外,它假设stopwords中的所有单词都是小写的,这就是我将单词转换为所有小写的原因。如果我做了一个很好的假设,就把它去掉


另外,我对正则表达式不太精通,如果有更干净、更健壮的方法,我很抱歉。

您可以使用这样的方法:

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
集合或列表中的单词相匹配。另外,它假设stopwords中的所有单词都是小写的,这就是我将单词转换为所有小写的原因。如果我做了一个很好的假设,就把它去掉

另外,我不精通正则表达式,如果有更干净或更健壮的方法,我很抱歉。

首先标记文本,而不是从stopwords中清除文本。标记器通常识别标点符号

导入nltk
text='儿子,如果你真的想在这一生中有所收获\
你必须为此而努力。现在安静!他们是关于\
宣布彩票号码。”
stopwords=['in','to','for','the']
sents=[]
对于nltk中发送的。发送的\u标记化(文本):
令牌=nltk.word\u令牌化(已发送)
sents.append(“”.join([w表示令牌中的w,如果w不在stopwords中])
打印sents
[“儿子,如果你这辈子真的想要什么,你就得去做。”,“现在安静!”,“他们就要宣布彩票号码了。”

首先标记文本,而不是清除停止词。标记器通常识别标点符号

导入nltk
text='儿子,如果你真的想在这一生中有所收获\
你必须为此而努力。现在安静!他们是关于\
宣布彩票号码。”
stopwords=['in','to','for','the']
sents=[]
对于nltk中发送的。发送的\u标记化(文本):
令牌=nltk.word\u令牌化(已发送)
sents.append(“”.join([w表示令牌中的w,如果w不在stopwords中])
打印sents

[“儿子,如果你今生真的想要某样东西,你就得去做。”,“现在安静!”,“他们就要宣布彩票号码了。”

nltk。word_tokenize(text)
会避开名称空间。更正它!谢谢。
word\u标记化
标记化
;Pclean会在这个过程中丢失所有标点符号吗?例如,
sent\u-tokenize(clean)
不再使用任何分隔符。
nltk.word\u-tokenize(text)
将避免使用名称空间。更正它!谢谢。
word\u标记化
标记化
;Pclean会在这个过程中丢失所有标点符号吗?例如,
sent\u tokenize(clean)
不再使用任何分隔符。