nltk与ipython悲伤的故事之内存也许溢出。。。

一段nltk的代码,按照讲解用于在布朗语料库中分析情态动词在不同文体中出现的次数

ipython 运行,python版本3.5,代码如下

import nltk
from nltk.corpus import brown
cfd = nltk.ConditionalFreqDist(
    (genre,word)
    for genre in brown.categories()
    for word in brown.words(categories=genre)
)
genres = [‘news‘, ‘religion‘, ‘hobbies‘, ‘science_fiction‘, ‘romance‘, ‘humor‘]
modals = [‘can‘, ‘could‘, ‘may‘, ‘might‘, ‘must‘, ‘will‘]
cfd.tabulate(conditions=genres, samples=modals)
cfd.plot(conditions=genres, samples=modals)

然后故事开始发生了,报错

---------------------------------------------------------------------------

ValueError                                Traceback (most recent call last)
<ipython-input-72-809f30b47486> in <module>()
      8 # cfd.tabulate(conditions=genres,sample =modals)
      9 cfd = nltk.ConditionalFreqDist(
---> 10     ((genre,word) for genre in brown.categories() for word in brown.words(categories = genre))
     11     # (genre,word)
     12     # for genre in brown.categories()
C:\Program Files\Python35\lib\site-packages\nltk\probability.py in __init__(self, cond_samples)
   1751         defaultdict.__init__(self, FreqDist)
   1752         if cond_samples:
-> 1753             for (cond, sample) in cond_samples:
   1754                 self[cond][sample] += 1
   1755 
<ipython-input-72-809f30b47486> in <genexpr>(.0)
      8 # cfd.tabulate(conditions=genres,sample =modals)
      9 cfd = nltk.ConditionalFreqDist(
---> 10     ((genre,word) for genre in brown.categories() for word in brown.words(categories = genre))
     11     # (genre,word)
     12     # for genre in brown.categories()
C:\Program Files\Python35\lib\site-packages\nltk\corpus\reader\tagged.py in words(self, fileids, categories)
    198     def words(self, fileids=None, categories=None):
    199         return TaggedCorpusReader.words(
--> 200             self, self._resolve(fileids, categories))
    201     def sents(self, fileids=None, categories=None):
    202         return TaggedCorpusReader.sents(
C:\Program Files\Python35\lib\site-packages\nltk\corpus\reader\tagged.py in words(self, fileids)
     81                                         self._para_block_reader,
     82                                         None)
---> 83                        for (fileid, enc) in self.abspaths(fileids, True)])
     84 
     85     def sents(self, fileids=None):
C:\Program Files\Python35\lib\site-packages\nltk\corpus\reader\util.py in concat(docs)
    420         return docs[0]
    421     if len(docs) == 0:
--> 422         raise ValueError(‘concat() expects at least one object!‘)
    423 
    424     types = set(d.__class__ for d in docs)
ValueError: concat() expects at least one object!

提示说concat里面没对象,恩,然后我天真的以为是没有对象,开始查错,发现格式没有问题。

然后开始怀疑传参有问题,对照源码,参数也没有问题。

接着stackoverflow上,转了一圈也没有什么帮助。

然后我开始怀疑人生,对nltk产生了厌恶情绪,对讲义迟怀疑态度。

过了几分钟,冷静下来,又开始梳理代码,总共就几行,分布对参数1个个的进行print,

    print ([genre for genre in brown.categories())
    print (word for word in brown.words(categories="news"))

发现都有结果输出。

然后重新推到参数,重新测试

for genre in brown.categories():
    for word in brown.words(categories=genre):
        print (word)

然后好了,发现ipython卡主了,删除print(word)发现停滞不能动了。感觉到了好像数据了有点大。好像是不是处理不过来了。

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

换迭代器传参,也不行,还是报错。

无奈,悻悻的新建一个py文件,拷贝刚才的代码,准备单独运行,按下ctrl shift f10, 居然弹出图形窗口,列表居然也输出了。

                  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

黑人问号脸。。。

时间: 2024-10-22 15:54:29

nltk与ipython悲伤的故事之内存也许溢出。。。的相关文章

C++TSL之map容器(悲伤的故事)

说一个悲伤地故事! 这几天正在加紧时间学STL!昨天刚刚勉强把map弄懂一点点.(故事的前提) 今天,来到平台准备刷有关map的题,老师推荐了一道题目.说是有关map.然后..不会!! 后来,百度..瞬间蒙逼!什么鬼! 特此求教! IP聚合 Problem Description 当今世界,网络已经无处不在了,小度熊由于犯了错误,当上了度度公司的网络管理员,他手上有大量的 IP列表,小度熊想知道在某个固定的子网掩码下,有多少个网络地址.网络地址等于子网掩码与 IP 地址按位进行与运算后的结果,例

STM32/GD32上内存堆栈溢出探测研究

无数次遭受堆栈溢出折磨,随着系统变得复杂,故障点越来越难以查找!主要溢出情况如下:1,一般RAM最后两块空间是堆Heap和栈Stack,堆从下往上用,栈从上往下用,任意一个用完,都会进入对方的空间2,如果栈用完,进入堆的空间,这个时候系统是不会有任何异常的,也就是说,栈底没有什么意义.除非堆和栈指针重叠,否则大家相安无事,尽管栈用了堆的3,如果栈用完进入堆,并且还碰到了堆的空间,这个时候系统仍然没有异常,但是堆栈会相互修改数据.最悲剧的就是栈里面保存的然会地址lr,一旦被堆指针修改,返回的时候就

一个程序员的悲伤爱情故事

小伟毕业后顺利的进了一家软件公司,他天生就是干这行的料,又是科班出身.不爱说话,不善于言谈,却热衷于解决程序中的难题,程序员的这些标签都贴在了他的身上. 每次解决一个难题,小伟总习惯对着电脑傻笑一会儿.刚开始大家都以为他脑子有点问题,后来久了也就习惯了. 女神降临 突然有一天,公司来了一名女程序员.在他看来她一点没有程序员的样貌,长发飘飘,一副大边框的眼镜里藏着一双美丽的大眼睛,连走路时身边带过来的风都夹着淡淡的清香. 她的位置被安排在了小伟边上,她向小伟问好同时对他笑了一下. 就这个很平常的举

Shmily,如何用一段简单的代码讲述一个悲伤的故事?

搞了几个小时的都没打印出第一个原始的自己写的代码,结果原因只有一个"怪不得老是打不出来,原来把println 写成 printIn" main没写,让后面报错package没写,导致快捷键无法使用sum +=b[i]; sum+ =b[i];//字符使用的错误 错错错 越多的雾霾堆积,反而为会愈加强你下一次遇见太阳的幸福感然后,我就喜欢上for循环的功能了 Love+1Love+1+1Love+1+1+1Love+1+1+1+1Love+1+1+1+1+1Love+1+1+1+1+1+

如何从pg拿出大量数据(内存不溢出)

前言 最近公司需要时间一个数据同步的功能,如果数据量小,还好,如果数据量特别大,几十G,那么发现Java虚拟机频繁GC,甚至内存溢出. 方案 以前使用的方法: PreparedStatement statement = con.prepareStatement("select * from table1"); 那么当读取数据的时候,(厂商不同,办法不同)Postgresql的Jdbc将内存全部读取到内存,导致内存溢出.解决的办法是设置每次读取数据的条数,比如:statement.set

tomcat 配置内存 防止溢出

点击配置页面中的 Open launch configuration 链接进入 Tomcat 启动项配置页面,在 VM arguments 中添加如下参数: -Xms512M -Xmx1024M -XX:PermSize=256m -XX:MaxPermSize=512m,具体大小根据自己的电脑硬件. 最后点击下面的 "OK" 按钮保存配置. -Xms40m:虚拟机占用系统的最小内存. -Xmx256m:虚拟机占用系统的最大内存. -XX:PermSize:最小堆大小.一般报内存不足时

varnish 内存池溢出导致故障处理

线上的varnish之前一直跑的很稳定,这段时间网站突然响应特别慢.查看日志如下 系统信息如下: 内存使用率很低但是负载特别高,查阅相关文档原因是因为内存映射限制导致. 可以通过统计 cat /proc/PID/maps | wc -l 查看现在的映射数量 默认系统的映射为 cat /proc/sys/vm/max_map_count 可以通过调高/etc/sysctl.conf中vm.max_map_count进行处理 参考链接: http://varnish-misc.varnish-cac

Java堆内存又溢出了!教你一招必杀技

JAVA堆内存管理是影响性能主要因素之一.堆内存溢出是JAVA项目非常常见的故障,在解决该问题之前,必须先了解下JAVA堆内存是怎么工作的. 先看下JAVA堆内存是如何划分的,如图: JVM内存划分为堆内存和非堆内存,堆内存分为年轻代(Young Generation).老年代(Old Generation),非堆内存就一个永久代(Permanent Generation). 年轻代又分为Eden和Survivor区.Survivor区由FromSpace和ToSpace组成.Eden区占大容量

网络瓶颈、线程死锁、内存泄露溢出、栈堆、ajax

网络瓶颈:网络传输性能及稳定性的一些相关元素 线程死锁:多个线程因竞争资源造成的一种僵局 下面我们通过一些实例来说明死锁现象. 先看生活中的一个实例,2个人一起吃饭但是只有一双筷子,2人轮流吃(同时拥有2只筷子才能吃).某一个时候,一个拿了左筷子,一人拿了右筷子,2个人都同时占用一个资源,等待另一个资源,这个时候甲在等待乙吃完并释放它占有的筷子,同理,乙也在等待甲吃完并释放它占有的筷子,这样就陷入了一个死循环,谁也无法继续吃饭...在计算机系统中也存在类似的情况.例如,某计算机系统中只有一台打印