我正在尝试完成机器学习课程的文本学习项目。我的老师为我提供了以下功能,但我不明白为什么会遇到错误。该函数应该使用一个字符串,删除标点和停用词,然后返回新字符串。
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的数千条电影评论。变量“评论”只是该数据集中的一个评论。
同样,该函数应该采用一个字符串,删除标点和停用词,然后返回新字符串。我不确定发生了什么,因为我查看了代码,对我来说看起来不错。
编辑:到目前为止,我从答复中听到的是,我的数据是列表的字典。听起来很正确。每个评论都是单词列表,而整个数据集都是评论列表。但是现在我需要找到一种方法来计算字典中列表的数量。我目前拥有的是:
num_reviews = count(train_reviews["reviews"])
print(num_reviews)
其中train_reviews [“ reviews”]是我的数据的子集。它仍然是列表的字典。我需要计算一下train_reviews中有多少个列表。这段代码没有出现错误,但是也没有任何输出。我肯定知道它应该已经从print命令产生了一些输出,这就是为什么我感到困惑。
P.S。如果我想提出一个全新的问题以便发布具有相同代码的新问题,请告诉我,以后我会记得的。
答案 0 :(得分:1)
看来您有一个字典data
,其中包含各种数据条目,其中之一在键"review"
下。这些数据条目是某种序列,也许是行(字符串)列表。
您将前1000行扫入了一个新列表first1000
。这是list
,而不是dict
-它没有任何键。您在此变量中有1000个字符串的序列-没有“审阅”条目。
从通话中删除["review"]
元素,然后看看会得到什么。更好的是,学习一些基本的调试:打印出您正在使用的值,以确保它们与您所认为的保持一致。
请参阅这个可爱的debug博客以获取帮助。
答案 1 :(得分:0)
您可能会收到此错误,因为data["review"][0:1000]
可能是list
(或一些可迭代的),而不是字典。如果是这样,要解决此问题,只需执行first1000[0]
。不过,由于您尚未提供MVCE,因此无法告诉您。
这是一个(较小的)示例:
In [4]: data = {'review': list(range(10000))}
In [5]: data['review'][0:10]
Out[5]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [6]: first10 = data['review'][0:10]
In [7]: first10[0]
Out[7]: 0
因此,当您使用给定的键访问字典项时,您会得到该键所指向的所有内容指向,而不是该键本身。由于它只是list
,如果尝试使用密钥'review'
,则会出现密钥错误,因为list
只能接受整数索引:
In [8]: first10['review'][0]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-8-61dfa9e84754> in <module>()
----> 1 first10['review'][0]
TypeError: list indices must be integers or slices, not str
HTH。