就我而言,毫无疑问。我正在Kaggle从事NLP和情感分析项目,首先我正在准备数据。 数据框是一个文本列,后跟一个从0到9的数字,该数字对行(文档)所属的群集进行分类。 我在sklearn中使用TF-IDF Vectorizer。我想摆脱所有不是英语单词的东西,所以我在使用以下内容:
class LemmaTokenizer(object):
def __init__(self):
self.wnl = WordNetLemmatizer()
def __call__(self,doc):
return [self.wnl.lemmatize(t) for t in word_tokenize(doc)]
s_words = list(nltk.corpus.stopwords.words("english"))
c = TfidfVectorizer(sublinear_tf=False,stop_words=s_words,token_pattern =r"(?ui)\\b\\w*[a-z]+\\w*\\b",tokenizer = LemmaTokenizer(),analyzer = "word",strip_accents = "unicode")
#a_df is the original dataframe
X = a_df['Text']
X_text = c.fit_transform(X)
据我所知,在调用c.get_feature_names()
时应仅返回属于正确单词的标记,而没有数字或标点符号。
我在StackOverflow的一篇文章中找到了正则表达式,但是使用像[a-zA-Z]+
这样的更简单的正则表达式将完全一样(这没什么)。
当我调用功能名称时,会得到类似
["''abalone","#","?","$","'","'0","'01","'accidentally",...]
这些仅仅是示例,但是它代表了我得到的输出,而不仅仅是文字。
我一直在尝试不同的正则表达式或方法来使用它。甚至对停用词上的某些功能的输出进行了硬编码。
我之所以这么问是因为稍后我将使用LDA
来获取每个群集的主题,并获得标点符号作为“主题”。
希望我不要重复其他帖子。我需要提供的信息会很高兴。预先谢谢你!