Lui*_*uel 5 python tokenize nltk
首先,我是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
Run Code Online (Sandbox Code Playgroud)
以下适用于小文件:
import nltk
filename=open("X:\MyFile.txt","r").read()
type(raw)
tokens = nltk.word.tokenize(filename)
Run Code Online (Sandbox Code Playgroud)
luk*_*ree 10
问题1:你正在通过char迭代文件char.如果要有效地读取每一行,只需打开文件(不要读取它)并按如下方式迭代file.readlines().
问题n°2:word_tokenize函数返回一个标记列表,因此你试图将一个str加到一个标记列表中.首先必须将列表转换为字符串,然后将其加到另一个字符串中.我将使用join函数来做到这一点.将我的代码中的逗号替换为要用作粘合/分隔符的char.
import nltk
filename=open("X:\MyFile.txt","r")
type(raw) #str
tokens = ''
for line in filename.readlines():
tokens+=",".join(nltk.word_tokenize(line))
Run Code Online (Sandbox Code Playgroud)
如果您需要列表中的令牌,只需执行以下操作:
import nltk
filename=open("X:\MyFile.txt","r")
type(raw) #str
tokens = []
for line in filename.readlines():
tokens+=nltk.word_tokenize(line)
Run Code Online (Sandbox Code Playgroud)
希望有所帮助!