首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中提取令牌的上下文单词

如何在python中提取令牌的上下文单词
EN

Stack Overflow用户
提问于 2015-03-29 09:46:09
回答 4查看 1.3K关注 0票数 0

实际上,我想提取特定单词的上下文词。为此,我可以在python中使用n-gram,但它的缺点是,它将窗口按一个滑动,但我只需要特定单词的上下文词。我的档案是这样的

代码语言:javascript
复制
 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的错误,不在列表中。

我的代码是

代码语言:javascript
复制
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();
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-03-29 11:04:53

首先,list.index( x ):返回值为x的第一项列表中的索引。

代码语言:javascript
复制
>>> ["foo", "bar", "baz"].index('bar')
1

在您的代码中,变量“word”是使用整数范围填充的,而不是由实际内容填充的。因此,我们不能在list.index()函数中直接使用'word‘。

代码语言:javascript
复制
>>> print lines.index(1)
ValueError: 1 is not in list

更改代码如下:

代码语言:javascript
复制
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()
票数 1
EN

Stack Overflow用户

发布于 2015-03-29 10:18:39

我不太明白你想做什么,但是,我会尽我最大的努力。

如果您想使用python处理单词,那么有一个名为NLTK的库,它的意思是自然语言工具包。

您可能需要标记一个句子或一个文档

代码语言:javascript
复制
import nltk


def tokenize_query(query):
    return nltk.word_tokenize(query)

f = open('C:/Python26/tokens.txt')
raw = f.read()
tokenize_query(raw)

我们还可以使用for循环一次读取一行文件:

代码语言:javascript
复制
f = open('C:/Python26/tokens.txt', 'rU')
for line in f:
    print(line.strip())

如果你想知道的话,R的意思是“阅读”,而U的意思是“普遍的”。

条带()只是从文本中删除'\n‘。

上下文可以由字网及其所有函数提供。我想你应该在单词的词组(词性的一部分)中使用同步词。

同义词集是一种语义上的同义词列表。

NLTK可以为您提供其他一些不错的功能,如情感分析和同步之间的相似性。

票数 0
EN

Stack Overflow用户

发布于 2015-03-29 12:16:16

代码语言:javascript
复制
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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29327683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档