如何解决停用词预处理不一致的问题?

时间:2019-07-20 11:11:31

标签: scikit-learn nlp

每次执行此功能时,都会引发错误。这里的user_input是单词列表,而article_sentences是单词列表列表。

我已经尝试过将所有停用词从列表中删除,但这并没有任何改变。

def generate_response(user_input):
    sidekick_response = ''
    article_sentences.append(user_input)

    word_vectorizer = TfidfVectorizer(tokenizer=get_processed_text, stop_words='english')
    all_word_vectors = word_vectorizer.fit_transform(article_sentences) # this is the problematic line
    similar_vector_values = cosine_similarity(all_word_vectors[-1], all_word_vectors)
    similar_sentence_number = similar_vector_values.argsort()[0][-2]

这是我在这里找到的一个简单聊天机器人功能的一部分:https://stackabuse.com/python-for-nlp-creating-a-rule-based-chatbot/ 它应该返回一个句子的排序列表,该列表按它们与user_input的匹配程度进行排序,但是它还会引发此错误:

/home/scarafleus/miniconda3/lib/python3.7/site-packages/scikit_learn-0.21.2-py3.7-linux-x86_64.egg/sklearn/feature_extraction/text.py:300: UserWarning: Your stop_words may be inconsistent with your preprocessing. Tokenizing the stop words generated tokens ['ha', 'le', 'u', 'wa'] not in stop_words.

2 个答案:

答案 0 :(得分:0)

预处理似乎存在问题。

根据我的个人经验,预处理中的词干步骤会导致某些词干,例如将 ing finance 一词分开,以使词干 financ 。最终,这些会结转并导致与TFIDF_Vectorizer-> stop_words列表不一致。

您可以查看此信息以获取有关此信息的更多信息-Python stemmer issue: wrong stem

您还可以尝试避免词干提取过程,而只进行标记化。这样至少可以解决不一致错误。

答案 1 :(得分:0)

已经here讨论了此用户警告问题。正如@jnothman所说:

  

...确保您对停止列表进行预处理,以确保将其标准化,就像标记将要进行标准化一样,然后将标准化单词列表作为stop_words传递给矢量化器。