首先,我是 python/nltk 的新手,所以如果问题太基本,我深表歉意。我有一个大文件,我正在尝试对其进行标记;我遇到内存错误。
我读过的一种解决方案是一次一行读取文件,这是有道理的,但是,在这样做时,我收到错误cannot concatenate 'str' and 'list' objects
。我不确定为什么会显示该错误,因为(读取文件后,我检查了它的类型,它实际上是一个字符串。
我尝试将 7MB 文件分成 4 个较小的文件,运行时,我得到:error: failed to write data to stream
.
最后,当尝试一个非常小的文件样本(100KB 或更少)并运行修改后的代码时,我能够对文件进行标记。
对正在发生的事情有任何见解吗?谢谢。
# tokenizing large file one line at a time
import nltk
filename=open("X:\MyFile.txt","r").read()
type(raw) #str
tokens = ''
for line in filename
tokens+=nltk.word_tokenize(filename)
#cannot concatenate 'str' and 'list' objects
以下适用于小文件:
import nltk
filename=open("X:\MyFile.txt","r").read()
type(raw)
tokens = nltk.word.tokenize(filename)
问题 1:您正在像这样逐个字符地迭代文件。如果您想有效地读取每一行,只需打开文件(不要读取它)并按如下所示迭代 file.readlines() 。
问题 n°2:word_tokenize 函数返回一个标记列表,因此您试图将一个 str 与一个标记列表相加。首先必须将列表转换为字符串,然后可以将其求和到另一个字符串。我将使用 join 函数来做到这一点。将代码中的逗号替换为您想要用作粘合/分隔符的字符。
import nltk
filename=open("X:\MyFile.txt","r")
type(raw) #str
tokens = ''
for line in filename.readlines():
tokens+=",".join(nltk.word_tokenize(line))
如果您需要列表中的令牌,只需执行以下操作:
import nltk
filename=open("X:\MyFile.txt","r")
type(raw) #str
tokens = []
for line in filename.readlines():
tokens+=nltk.word_tokenize(line)
希望有帮助!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)