Python 如何遍历文件中的元组
我正在为我的NLP类做一个项目,现在我有一个.txt文件,看起来像这样: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',
(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-谢谢你指出它。