实际上,我想提取特定单词的上下文词。为此,我可以在python中使用n-gram,但它的缺点是,它将窗口按一个滑动,但我只需要特定单词的上下文词。我的档案是这样的
IL-2
gene
expression
and
NF-kappa
B
activation
through
CD28
requires
reactive
oxygen
production
by
5-lipoxygenase
. 意味着每一行上的每一个标记。现在,我想提取每个词的周围词,例如,通过和要求是"CD28"的周围单词。我编写了python代码,但是没有工作,并且生成了ValueError: list.index(x):x的错误,不在列表中。
我的代码是
import re;
import nltk;
file=open("C:/Python26/test.txt");
contents= file.read()
tokens = nltk.word_tokenize(contents)
f=open("trigram.txt",'w');
for l in tokens:
print tokens[l],tokens[l+1]
f.close();发布于 2015-03-29 11:04:53
首先,list.index( x ):返回值为x的第一项列表中的索引。
>>> ["foo", "bar", "baz"].index('bar')
1在您的代码中,变量“word”是使用整数范围填充的,而不是由实际内容填充的。因此,我们不能在list.index()函数中直接使用'word‘。
>>> print lines.index(1)
ValueError: 1 is not in list更改代码如下:
file="C:/Python26/tokens.txt";
f=open("trigram.txt",'w');
with open(file,'r') as rf:
lines = rf.readlines();
for word in range(1,len(lines)-1):
f.write(lines[word-1].strip()+"\t"+lines[word].strip()+"\t"+lines[word+1].strip())
f.close()发布于 2015-03-29 10:18:39
我不太明白你想做什么,但是,我会尽我最大的努力。
如果您想使用python处理单词,那么有一个名为NLTK的库,它的意思是自然语言工具包。
您可能需要标记一个句子或一个文档。
import nltk
def tokenize_query(query):
return nltk.word_tokenize(query)
f = open('C:/Python26/tokens.txt')
raw = f.read()
tokenize_query(raw)我们还可以使用for循环一次读取一行文件:
f = open('C:/Python26/tokens.txt', 'rU')
for line in f:
print(line.strip())如果你想知道的话,R的意思是“阅读”,而U的意思是“普遍的”。
条带()只是从文本中删除'\n‘。
上下文可以由字网及其所有函数提供。我想你应该在单词的词组(词性的一部分)中使用同步词。
同义词集是一种语义上的同义词列表。
NLTK可以为您提供其他一些不错的功能,如情感分析和同步之间的相似性。
发布于 2015-03-29 12:16:16
file="C:/Python26/tokens.txt";
f=open("trigram.txt",'w');
with open(file,'r') as rf:
lines = rf.readlines();
for word in range(1,len(lines)-1):
f.write(lines[word-1].strip()+"\t"+lines[word].strip()+"\t"+lines[word+1].strip())
f.write("\n")
f.close()https://stackoverflow.com/questions/29327683
复制相似问题