2014-01-21 77 views
1

我有一个包含以下几行的文本文件,我想将它们拆分为每个句子的列表,一个句子是1-5,另一个是1-8,等等,每个句子之间都有空格句子。举例来说,一个句子列表应该是[ '田园', 'allmänna', 'pensionen', 'AR', 'AV'],即1-5将较大的文本文件拆分为句子

from collections import defaultdict 

out = defaultdict(list)    # Initialize dictionary for output 
key = 0        # Initialize key 

for idx, word, _ in container:  # Unpack sublists 
    if int(idx) == 1:    # Check if we are at start of new sentence 
     key += 1      # Increment key for new sentence 
    out[key].append(word)   # Add word to list 

How to slice numbered lists into sublists

代码工作好吧,但是当我试图直接从测试文件应用于分割线时,我得到 ValueError表示有太多的值需要解压缩。该文件总共包含87行。我想使用上面的代码,但不知道如何解决ValueError。

1 Den  DT DT UTR|SIN|DEF 3 DT _ _ _ _ P108_1:1 
2 allmänna  JJ JJ POS|UTR/NEU|SIN|DEF|NOM 3 AT _ _ _ _ P108_1:2 
3 pensionen  NN NN UTR|SIN|DEF|NOM 4 SS _ _ _ _ P108_1:3 
4 är  VB VB PRS|AKT 0 ROOT _ _ _ _ P108_1:4 
5 av  PP PP  4 SP _ _ 


1 Folkpensionen  NN NN UTR|SIN|DEF|NOM 2 OO _ _ _ _ P108_2:1 
2 får  VB VB PRS|AKT 0 ROOT _ _ _ _ P108_2:2 
3 man  PN PN UTR|SIN|IND|SUB 2 SS _ _ _ _ P108_2:3 
4 oberoende  PC PC PRS|UTR/NEU|SIN/PLU|IND/DEF|NOM 2 AA _ _ _ _ P108_2:4 
5 av  PP PP  4 HD _ _ 
6 tidigare  JJ JJ KOM|UTR/NEU|SIN/PLU|IND/DEF|NOM 7 DT _ _ _ _ P108_2:6 
7 arbetsinkomst  NN NN UTR|SIN|IND|NOM 4 PA _ _ _ _ P108_2:7 
8 .  MAD MAD  2 IP _ _ 
+0

哪条线,你遇到ValueError异常?它通常意味着你右边的值有更多的值,然后你在左边提供的变量。例如:'a,b =(1,2,3)'会抛出这个错误。检查您的输入以查看您遇到问题的哪一行。 – tayfun

回答

3

使用itertools.groupby和组使用str.isspace项目:

from itertools import groupby 

with open('abc1') as f: 
    for k, g in groupby(f, str.isspace): 
     if not k: 
      sentence = [x.split(None, 2)[1] for x in g] 
      print sentence 

输出:

['Den', 'allm\xc3\xa4nna', 'pensionen', '\xc3\xa4r', 'av'] 
['Folkpensionen', 'f\xc3\xa5r', 'man', 'oberoende', 'av', 'tidigare', 'arbetsinkomst', '.'] 
+0

非常感谢,Ashwini! – user1749431

+1

@ user1749431很高兴有帮助,如果它适合你,你可以[接受答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235) 。 –

相关问题