首页 > 解决方案 > 文本清理和停用词

问题描述

我正在尝试为机器学习课程完成一个文本学习项目。我的老师给了我以下功能,但我不明白为什么会收到我遇到的错误。这个函数应该接受一串单词,删除标点符号和停用词,然后返回新字符串。

def review_to_words( raw_review ):
    # Function to convert a raw review to a string of words
    # The input is a single string (a raw movie review), and 
    # the output is a single string (a preprocessed movie review)
    #
    # 1. Remove HTML
    review_text = BeautifulSoup(raw_review).get_text() 
    #
    # 2. Remove non-letters (punctuation)       
    letters_only = re.sub("[^a-zA-Z]", " ", review_text) 
    #
    # 3. Convert to lower case, split into individual words
    words = letters_only.lower().split()                             
    #
    # 4. In Python, searching a set is much faster than searching
    #   a list, so convert the stop words to a set
    stops = set(stopwords.words("english"))                  
    # 
    # 5. Remove stop words
    meaningful_words = [w for w in words if not w in stops]   
    #
    # 6. Join the words back into one string separated by space, 
    # and return the result.
    return( " ".join( meaningful_words ))

clean_review = review_to_words(first1000["review"][0] )

它表示以下行中的“review”存在关键错误:

clean_review = review_to_words(first1000["review"][0] )

first1000 是一个变量设置为:

first1000 = data["review"][0:1000]

我的数据集是一个 .tsv 文件,其中包含来自 imdb 的数千条电影评论。变量“review”只是该数据集中的一条评论。

同样,这个函数应该接受一串单词,删除标点符号和停用词,然后返回新字符串。我不确定发生了什么,因为我查看了代码并且对我来说看起来不错。

编辑:到目前为止,我从回复中听到的是,我的数据是一个列表字典。听起来是对的。每个评论都是一个单词列表,整个数据集是一个评论列表。但是现在我需要找到一种方法来计算字典中列表的数量。我目前拥有的是:

num_reviews = count(train_reviews["reviews"])
print(num_reviews)

其中 train_reviews["reviews"] 是我的数据的一个子集。它仍然是一个列表字典。我需要计算 train_reviews 中有多少个列表。这段代码我没有收到错误,但我也没有得到任何输出。我确定它应该从打印命令中产生一些输出,这就是我感到困惑的原因。

PS如果我应该提出一个全新的问题以发布有关使用相同代码的新问题,请告诉我,我会在未来记住这一点。

标签: pythonmachine-learningtext

解决方案


看来您有一个data包含各种数据条目的字典,其中一个在 key 下"review"。该数据条目是某种序列,可能是行(字符串)列表。

您将前 1000 行扫描到一个新列表中,first1000. 这是 a list,而不是 a dict- 它没有任何键。在这个变量中有 1000 个字符串的序列——没有“review”条目。

从您的通话中删除该["review"]元素,看看您会得到什么。更好的是,学习一些基本的调试:打印出你正在使用的值,以确保它们与你认为它们所持有的相匹配。

请参阅这个可爱的调试博客寻求帮助。


推荐阅读