Python 如何遍历文件中的元组

Python 如何遍历文件中的元组,python,tuples,Python,Tuples,我正在为我的NLP类做一个项目,现在我有一个.txt文件,看起来像这样: (u'I', u'PRON')(u'am', u'VERB')(u'nobody', u'NOUN')(u':', u'.')(u'A', u'DET')(u'red', u'ADJ')(u'sinking', u'NOUN')(u'autumn', u'NOUN')(u'sun', u'NOUN')(u'Took', u'NOUN')(u'my', u'PRON')(u'name', u'NOUN')(u'away',

我正在为我的NLP类做一个项目,现在我有一个.txt文件,看起来像这样:

(u'I', u'PRON')(u'am', u'VERB')(u'nobody', u'NOUN')(u':', u'.')(u'A', u'DET')(u'red', u'ADJ')(u'sinking', u'NOUN')(u'autumn', u'NOUN')(u'sun', u'NOUN')(u'Took', u'NOUN')(u'my', u'PRON')(u'name', u'NOUN')(u'away', u'ADV')(u'.', u'.')(u'Keep', u'VERB')(u'straight', u'VERB')(u'down', u'PRT')(u'this', u'DET')(u'block', u'NOUN')....
所以基本上,它只是一组元组,有一个单词和一个标签。我试图遍历这个文件并返回一个标有“NOUN”的列表

因此,输出可能如下所示:
[“无人”、“秋天”…]


我真的不确定如何遍历这些元组和更多的元组,所以要去掉u'标记。有人能帮忙吗?

您可以使用列表理解来完成此操作,例如:

lst = [i[0] for i in tuples if i[1] == "NOUN"]
列表理解语法有点混乱,所以这里是循环的等效语法

lst=[]
for i in tuples:
    if i[1] == "NOUN":
        lst.append(i)

您可以使用列表理解来执行此操作,例如:

lst = [i[0] for i in tuples if i[1] == "NOUN"]
列表理解语法有点混乱,所以这里是循环的等效语法

lst=[]
for i in tuples:
    if i[1] == "NOUN":
        lst.append(i)

我假设您首先从文本中获取行,并将所有u替换为。然后你可以像这样迭代元组

x = [('I', 'PRON'), ('am', 'VERB'), ('nobody', 'NOUN')] // that would be lines of your text file.
array = []
for element in x:
    first, second = element
    if second == "NOUN":
        array.append(first)

print array

我假设您首先从文本中获取行,并将所有u替换为。然后你可以像这样迭代元组

x = [('I', 'PRON'), ('am', 'VERB'), ('nobody', 'NOUN')] // that would be lines of your text file.
array = []
for element in x:
    first, second = element
    if second == "NOUN":
        array.append(first)

print array

使用列表理解分解所有元组,对单词应用str函数将其转换为字符串而不是unicode,并根据单词类型筛选出单词:

output=[str(word)表示单词,如果wtype.lower()=='noon'],则在元组列表中键入它。

一个小技巧是使用lower函数来标准化字符串以检查条件。如果您认为您将使用流氓空格,也可以在它之后立即使用strip(),如:
wtype.lower().strip()=='noun'

使用列表理解来分解所有元组,对单词应用str函数将其转换为字符串而不是unicode,并根据单词的类型筛选出单词:

output=[str(word)表示单词,如果wtype.lower()=='noon'],则在元组列表中键入它。

一个小技巧是使用lower函数来标准化字符串以检查条件。如果您认为您将使用流氓空格,也可以在它之后立即使用strip(),如:
wtype.lower().strip()=='noon'

考虑到文本文件中有数据,下面是使用正则表达式的解决方案:

import re
data = """(u'I', u'PRON')(u'am', u'VERB')(u'nobody', u'NOUN')(u':', u'.')(u'A', u'DET')(u'red', u'ADJ')(u'sinking', u'NOUN')(u'autumn', u'NOUN')(u'sun', u'NOUN')(u'Took',u'NOUN')(u'my', u'PRON')(u'name', u'NOUN')(u'away', u'ADV')(u'.', u'.')(u'Keep', u'VERB')(u'straight', u'VERB')(u'down', u'PRT')(u'this',u'DET')(u'block', u'NOUN')'s = r"(u'I', u'PRON')(u'am', u'VERB')(u'nobody', u'NOUN')(u':', u'.')(u'A', u'DET')(u'red', u'ADJ')(u'sinking', u'NOUN')(u'autumn', u'NOUN')(u'sun', u'NOUN')(u'Took', u'NOUN')(u'my', u'PRON')(u'name', u'NOUN')(u'away', u'ADV')(u'.', u'.')(u'Keep', u'VERB')(u'straight',u'VERB')(u'down', u'PRT')(u'this', u'DET')(u'block', u'NOUN')"""
#Use regex to get the split the data as required
rx = re.compile(r"\(u'(.*?)'\,\su'(.*?)'\)")
#Find all the matches
matches = rx.findall(s)
tuples = []
for match in matches:
    tuples.append(match)

#Get the nouns from the list of tuples  
nouns = [ x for x in tuples if "NOUN" in x]
下图显示了生成的结果:

考虑到您将数据保存在文本文件中,下面是一个使用regex的解决方案:

import re
data = """(u'I', u'PRON')(u'am', u'VERB')(u'nobody', u'NOUN')(u':', u'.')(u'A', u'DET')(u'red', u'ADJ')(u'sinking', u'NOUN')(u'autumn', u'NOUN')(u'sun', u'NOUN')(u'Took',u'NOUN')(u'my', u'PRON')(u'name', u'NOUN')(u'away', u'ADV')(u'.', u'.')(u'Keep', u'VERB')(u'straight', u'VERB')(u'down', u'PRT')(u'this',u'DET')(u'block', u'NOUN')'s = r"(u'I', u'PRON')(u'am', u'VERB')(u'nobody', u'NOUN')(u':', u'.')(u'A', u'DET')(u'red', u'ADJ')(u'sinking', u'NOUN')(u'autumn', u'NOUN')(u'sun', u'NOUN')(u'Took', u'NOUN')(u'my', u'PRON')(u'name', u'NOUN')(u'away', u'ADV')(u'.', u'.')(u'Keep', u'VERB')(u'straight',u'VERB')(u'down', u'PRT')(u'this', u'DET')(u'block', u'NOUN')"""
#Use regex to get the split the data as required
rx = re.compile(r"\(u'(.*?)'\,\su'(.*?)'\)")
#Find all the matches
matches = rx.findall(s)
tuples = []
for match in matches:
    tuples.append(match)

#Get the nouns from the list of tuples  
nouns = [ x for x in tuples if "NOUN" in x]
下图显示了生成的结果:

我不确定您认为
str()
有什么作用,但在Python3中,它是。此外,在这种情况下,使用下部或条形有什么意义?OP在案例中没有任何变化,或者空白条只是给他一个提示。你不会总是得到干净的数据。知道也无妨。他想把u去掉,他通过str得到,假设是2。我真的不明白你的意思。我不确定你认为
str()
有什么作用,但在Python3中,它是。此外,在这种情况下,使用下部或条形有什么意义?OP在案例中没有任何变化,或者空白条只是给他一个提示。你不会总是得到干净的数据。知道也无妨。他想把u去掉,他通过str得到,假设是2。我真的不明白你的意思。你有一个错误的报价,但是错误的报价问题已经解决了@Natecat-谢谢你指出它。你有一个错误的报价,但错误的报价问题已经解决@Natecat-谢谢你指出它。