【问题标题】:Split larger textfile to sentences将大文本文件拆分为句子
【发布时间】:2014-02-11 05:30:20
【问题描述】:

我有一个包含以下行的文本文件,我想将它们拆分为每个句子的列表,一个句子是 1-5,另一个是 1-8,依此类推,每个句子之间都有空格。比如一个句子列表应该是['Den', 'allmänna','pensionen', 'är', '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  _   _   

【问题讨论】:

  • 您在哪一行遇到 ValueError?这通常意味着您在右侧拥有的值比您在左侧提供的变量具有更多的值。例如:a, b = (1, 2, 3) 会抛出这个错误。检查您的输入以查看您遇到问题的线路。

标签: python regex file dictionary split


【解决方案1】:

使用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', '.']

【讨论】:

  • @user1749431 很高兴有帮助,如果对您有用,您可以 accept the answer
猜你喜欢
  • 2013-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-18
  • 1970-01-01
  • 2011-08-02
相关资源
最近更新 更多