1

我是一个 Python 新手,试图使用特定单词的字典来计算语料库(语料库)中出现的单词。语料库是一种经过标记化、规范化、词形还原和词干化的字符串类型。

dict = {}
dict ['words'] =  ('believe', 'tried', 'trust', 'experience')
counter=0
Result = []
for word in corpora:
    if word in dict.values():
        counter = i + 1
        else counter = 0

此代码在 dict.values() 行上产生语法错误。任何帮助表示赞赏!

4

2 回答 2

1
  1. 不要做dict = {}dict是一个内置函数,你正在隐藏它。这并不重要,如果您以后需要它,您将无法使用它。
  2. 字典是键→值映射。就像一本真正的字典(单词→翻译)。你所做的就是说 value ('believe', …),它是一个元组,对应'word'于你字典中的键。然后,您使用dict.values()which 为您提供存储在字典中的所有值的序列,在您的情况下,该序列仅包含一个项目,并且该项目是一个元组。您的if条件永远不会是True:word是一个字符串并且dict.values()是一个序列,由单个字符串元组组成。
  3. 我不太确定你为什么要使用字典。似乎您有一组对您很重要的单词,并且您正在扫描corpora并计算这些单词的出现次数。这里的关键词是set。你不需要字典,你需要一个set.
  4. 目前还不清楚,你在数什么。i你要添加什么counter?如果您打算加counter一,那应该是counter = counter + 1或简单地counter += 1.
  5. 你为什么要重置counter

    counter = 0
    

    当你发现一个未知单词时,我不认为你真的想重置计数器。似乎不知道的词不应该改变你的计数器,那么,就不要改变它。

  6. 笔记。尽量避免在变量名中使用大写字母(Result = []不好)。同样正如其他人所提到的,您在 . 之后缺少一个冒号else

所以,现在让我们把它们放在一起。首先要做的是制作一组我们感兴趣的单词:

words = {'believe', 'tried', 'trust', 'experience'}

接下来,您可以遍历语料库中的单词,并查看其中哪些出现在集合中:

for word in corpora:
    if word in words:
        # do something

目前尚不清楚代码究竟应该做什么,但如果您的目标是知道集合中的所有单词一起在语料库中找到的次数,那么您只需在其中添加counter一个if

如果您想知道集合中每个单词在语料库中出现的次数,则必须为集合中的每个单词维护一个单独的计数器(这就是字典可能有用的地方)。这可以通过collections.Counter(这是一个特殊的字典)轻松实现,并且您必须过滤您的语料库以仅留下您感兴趣的单词,这ifilter将对您有所帮助。

filtered_corpora = itertools.ifilter(lambda w: w in words, corpora)

——这是你的语料库将所有找不到的词都words删除。您可以Counter立即通过它。

这个技巧对于第一种情况也很有用(即当你只需要总数时)。您将只返回此filtered 语料库 ( len(filtered_corpora)) 的长度。

于 2013-06-05T07:15:19.857 回答
0

你有多个问题。您没有corpora在此处的示例中定义。你正在 redfining dict,这是一个内置类型。没有else正确缩进。dict.values()返回一个可迭代的,每个都是一个元组;word如果 word 是字符串,则不会在其中。实际上,还不清楚什么是counter重要的。以及Results那里在做什么?

您的代码可能类似于此(伪)代码

d = {'words' : ('believe', 'tried', 'trust', 'experience')} #if that's really what you want
counter = {}
for word in corpora:
    for tup in d.values(): # each tup is a tuple
        if word in tup:
            x = counter[word] if word in counter else 0
            counter[word] = x+1

有一种更短的方法可以做到这一点。

这项计算事物的任务非常普遍,以至于库中存在一个用于这样做的特定类:collections.Counter.

于 2013-06-05T06:47:32.180 回答