获取" ValueError:concat()需要至少一个对象!"在一个简单的python代码块中

时间:2015-04-23 09:14:09

标签: python nltk ipython-notebook

我在我的IPython笔记本中运行了以下代码块并得到了一个valueerror。我无法弄清楚它是否是一个语法错误。

<head>  
  <script type="text/javascript">
    tinymce.init({
      selector: "textarea"
    });
  </script>
</head>
<body>
  <form method="post">
    <textarea></textarea>
    <textarea></textarea>
    <textarea></textarea>
    <textarea></textarea>
    <textarea></textarea>
    <textarea></textarea>
    <textarea></textarea>
  </form>
</body>

会给我

import sys
sys.version

并且正在运行

'2.7.9 |Anaconda 2.2.0 (64-bit)| (default, Dec 18 2014, 16:57:52) [MSC v.1500 64 bit (AMD64)]'

我收到以下错误:

from nltk.corpus import brown
[(genre, word) for genre in brown.categories() for word in brown.words(categories=genre) ]

提前感谢所有帮助。

3 个答案:

答案 0 :(得分:1)

从跟踪中看到的是没有按名称genre的类别。

如果我只是在棕色语料库中显示类别:

for name in brown.categories():
    print name

Outputs:
adventure
belles_lettres
editorial
fiction
government
hobbies
humor
learned
lore
mystery
news
religion
reviews
romance
science_fiction

您可以使用棕色语料库中的任何上述类别。

将其更改为:

[(genre, word) for genre in brown.categories() for word in brown.words(categories=genre) ]

这:

[(genre, word) for genre in brown.categories() for word in brown.words(categories=['news']) ] //Interested in news categories

更多关于您在外部for loop指定的类别,内部for loop迭代语料库中的所有类别,因此输出将是相同的。

答案 1 :(得分:0)

您的代码是正确的,适合我。您的布朗语料库数据(文本文件或类别文件)似乎已损坏或丢失。

答案 2 :(得分:0)

我遇到了同样的问题。如果我使用上面给出的解决方案:

cfd = nltk.ConditionalFreqDist(
           (genre, word)
           for genre in brown.categories()
           for word in brown.words(categories='news')) 
genres=['news','religion','hobbies','science_fiction','romance','humor']
modals=['can','could','may','might','must','will']

cfd.tabulate(conditions=genres, samples=modals)

输出:

                 can could   may might  must  will 
           news    93    86    66    38    50   389 
       religion    93    86    66    38    50   389 
        hobbies    93    86    66    38    50   389 
science_fiction    93    86    66    38    50   389 
        romance    93    86    66    38    50   389 
          humor    93    86    66    38    50   389 

如您所见,所有行都是相同的。外部for循环遍历所有类别,但是内部for循环从genre ='news'收集单词。

此解决方案不正确。

一种解决方法是先声明类别列表“类型”:

genres=['news','religion','hobbies','science_fiction','romance','humor']
       cfd = nltk.ConditionalFreqDist(
       (genre, word)
       for genre in genres
       for word in brown.words(categories=genre))

cfd.tabulate(conditions=genres, samples=modals)

输出:

                  can could   may might  must  will 
           news    93    86    66    38    50   389 
       religion    82    59    78    12    54    71 
        hobbies   268    58   131    22    83   264 
science_fiction    16    49     4    12     8    16 
        romance    74   193    11    51    45    43 
          humor    16    30     8     8     9    13