我有treetagger's python包装器中的标签对象,显然是列表:
In:
print type (tags)
Out:
<type 'list'>
当我按如下方式打印tags
的内容时,我会得到以下列表:
In:
def postag_directory(input_directory, output_directory):
import codecs, treetaggerwrapper, glob, os
for filename in sorted(glob.glob(os.path.join(input_directory, '*.txt'))):
with codecs.open(filename, encoding='utf-8') as f:
lines = [f.read()]
#print 'lines:\n',lines
tagger = treetaggerwrapper.TreeTagger(TAGLANG = 'en')
tags = tagger.TagText(lines)
print '\n\n**** labels:****\n\n',tags
Out:
[[u'I\tPP\tI', u'am\tVBP\tbe', u'an\tDT\tan', u'amateur\tJJ\tamateur']]
[[u'This\tDT\tthis', u'my\tPP$\tmy']]
[[u'was\tVBD\tbe', u'to\tTO\tto', u'be\tVB\tbe', u'my\tPP$\tmy', u'camera\tNN\tcamera', u'for\tIN\tfor', u'long-distance\tJJ\tlong-distance', u'backpacking\tNN\tbackpacking', u'trips\tNNS\ttrip', u'.\tSENT\t.', u'It\tPP\tit']]
然而,我想只获得一个这样的嵌套列表:
[[u'I\tPP\tI', u'am\tVBP\tbe', u'an\tDT\tan', u'amateur\tJJ\tamateur'],[u'This\tDT\tthis', u'my\tPP$\tmy'],[u'was\tVBD\tbe', u'to\tTO\tto', u'be\tVB\tbe', u'my\tPP$\tmy', u'camera\tNN\tcamera', u'for\tIN\tfor', u'long-distance\tJJ\tlong-distance', u'backpacking\tNN\tbackpacking', u'trips\tNNS\ttrip', u'.\tSENT\t.', u'It\tPP\tit']]
我已经准备好了list()
,append()
,[]
以及:
for sublist in [item]:
new_list = []
new_list.append(sublist)
print new_list
我知道如何嵌套来自tags
的每个列表?
答案 0 :(得分:4)
这是一个元素的列表(另一个列表)。
[[u'I\tPP\tI', u'am\tVBP\tbe', u'an\tDT\tan', u'amateur\tJJ\tamateur']]
因此,如果item
是一个列表列表,每个列表都包含一个元素,那么您可以执行
new_list = [sublist[0] for sublist in item]
如果每个子列表中有多个元素,那么你需要另一个嵌套循环。
但实际上,您不应该使用lines = [f.read()]
。使用tag_text
时,文档使用单个字符串,因此请从此
# Initialize one tagger
tagger = treetaggerwrapper.TreeTagger(TAGLANG='en')
# Loop over the files
all_tags = []
for filename in sorted(glob.glob(os.path.join(input_directory, '*.txt'))):
with codecs.open(filename, encoding='utf-8') as f:
# Read the file
content = f.read()
# Tag it
tags = tagger.tag_text(content)
# add those tags to the master tag list
all_tags.append(tags)
print(all_tags)