分类 – NLTK perceptron tagger“TypeError:’LazySubsequence’对象不支持项目分配”

分类 – NLTK perceptron tagger“TypeError:’LazySubsequence’对象不支持项目分配”,第1张

概述我想尝试在 Python 3.5的nltk包中使用PerceptronTagger但是我收到错误TypeError:’LazySubsequence’对象不支持项目赋值 我想用来自棕色语料库的数据和通用标签来训练它. 这是我遇到问题时运行的代码. import nltk,mathtagged_sentences = nltk.corpus.brown.tagged_sents(categorie 我想尝试在 Python 3.5的nltk包中使用PerceptronTagger但是我收到错误TypeError:’LazySubsequence’对象不支持项目赋值

我想用来自棕色语料库的数据和通用标签来训练它.

这是我遇到问题时运行的代码.

import nltk,mathtagged_sentences = nltk.corpus.brown.tagged_sents(categorIEs='news',Tagset='universal')i = math.floor(len(tagged_sentences)*0.2)testing_sentences = tagged_sentences[0:i]training_sentences = tagged_sentences[i:]perceptron_tagger = nltk.tag.perceptron.PerceptronTagger(load=False)perceptron_tagger.train(training_sentences)

它无法正确训练,并提供以下堆栈跟踪.

---------------------------------------------------------------------------TypeError                                 Traceback (most recent call last)<ipython-input-10-61332d63d2c3> in <module>()      1 perceptron_tagger = nltk.tag.perceptron.PerceptronTagger(load=False)----> 2 perceptron_tagger.train(training_sentences)/home/nathan/anaconda3/lib/python3.5/site-packages/nltk/tag/perceptron.py in train(self,sentences,save_loc,nr_iter)    192                     c += guess == Tags[i]    193                     n += 1--> 194             random.shuffle(sentences)    195             logging.info("Iter {0}: {1}/{2}={3}".format(iter_,c,n,_pc(c,n)))    196         self.model.average_weights()/home/nathan/anaconda3/lib/python3.5/random.py in shuffle(self,x,random)    270                 # pick an element in x[:i+1] with which to exchange x[i]    271                 j = randbelow(i+1)--> 272                 x[i],x[j] = x[j],x[i]    273         else:    274             _int = intTypeError: 'LazySubsequence' object does not support item assignment

它似乎来自随机模块中的shuffle函数,但这看起来并不合适.

还有其他可能导致问题的原因吗?
有人有这个问题吗?

我正在使用Anaconda Python 3.5在Ubuntu 16.04.1上运行它. nltk版本是3.2.1

解决方法 NLTK有很多自定义的“懒惰”类型,它们可以简化大量数据的修改,例如带注释的语料库.它们在许多方面表现得像标准列表,元组,词汇等,但避免不必要地占用太多内存.

其中一个例子是LazySubsequence,它是切片表达式tagged_sentences [i:]的结果.如果tagged_sentences是正常列表,则将数据划分为测试/培训将创建数据的完整副本.相反,这个LazySubsequence是对原始序列的部分视图.

虽然这对内存的好处可能是一件好事,但这里的问题是这个视图是只读的.
显然,PerceptronTagger希望将其输入数据原位洗牌,这是不允许的 – 因此是例外.

一个快速(但可能不是最优雅)的解决方案是为标记器提供数据的副本:

perceptron_tagger.train(tuple(training_sentences))

您可能必须对测试数据执行相同的 *** 作.

总结

以上是内存溢出为你收集整理的分类 – NLTK perceptron tagger“TypeError:’LazySubsequence’对象不支持项目分配”全部内容,希望文章能够帮你解决分类 – NLTK perceptron tagger“TypeError:’LazySubsequence’对象不支持项目分配”所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1193745.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存