【问题标题】:A function to count words in a corpora using dictionary values using Python使用 Python 使用字典值对语料库中的单词进行计数的函数
【发布时间】:2013-06-05 06:33:35
【问题描述】:

我是一名 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() 行产生语法错误。任何帮助表示赞赏!

【问题讨论】:

  • else 后面少了一个冒号,它位于错误的缩进块上
  • 离题:不要使用dict作为变量名。
  • 这可能会对您有所帮助,“语料库”的价值是什么。 >>> dict = {} >>> dict ['words'] = ('believe', 'tried', 'trust', 'experience') >>> dict.values() [('believe', 'tried ', '信任', '经验')]

标签: python for-loop dictionary counting words


【解决方案1】:
  1. 不要做dict = {}dict 是一个内置函数,您正在隐藏它。这并不重要,如果您以后需要它,您将无法使用它。
  2. 字典是键→值映射。就像一本真正的字典(单词→翻译)。你所做的就是说值('believe', …),它是一个元组,对应于你字典中的键'word'。然后您使用dict.values(),它为您提供存储在字典中的所有值的序列,在您的情况下,该序列仅包含一个项目,并且该项目是一个元组。您的if 条件永远不会是Trueword 是一个字符串,dict.values() 是一个序列,由单个元组字符串组成。
  3. 我不确定您为什么要使用字典。似乎您有一组对您很重要的单词,您正在扫描您的corpora 并计算这些单词的出现次数。这里的关键词是set。你不需要字典,你需要set
  4. 不清楚,你在数什么。您要添加到counteri 是什么?如果您打算将 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)) 的长度。

【讨论】:

    【解决方案2】:

    您有多个问题。您没有在此处的示例中定义 corpora。你正在重新定义dict,这是一个内置类型。 else 没有正确缩进。 dict.values() 返回一个iterable,每一个都是一个元组; 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-09
      • 2014-01-02
      • 2018-06-12
      • 1970-01-01
      相关资源
      最近更新 更多