将单词合并为一行

时间:2012-12-21 16:21:35

标签: python text

我目前正在使用Python v2.6并尝试将单词合并为一行。我的代码应该从文本文件中读取数据,其中我有两行数据,这两行都是字符串。然后,它每次获取第二行数据,这些是句子的单词,由分隔符字符串分隔,这样:

在.txt内:

"delimiter_string"
"row_1_data" "row_2_data"  
"row_1_data" "row_2_data"  
"row_1_data" "row_2_data"  
"row_1_data" "row_2_data"  
"row_1_data" "row_2_data"  
"delimiter_string" 
"row_1_data" "row_2_data"  
"row_1_data" "row_2_data"  
...

那些“row_2_data”将在以后添加到句子中。对不起,长期介绍btw。

这是我的代码:

import sys
import re

newLine = ''

for line in sys.stdin:

    word = line.split(' ')[1]

    if word == '<S>+BSTag': 
        continue

    elif word == '</S>+ESTag':
        print newLine
        newLine = ''
        continue

    else:
        w = re.sub('\[.*?]', '', word)

        if newLine == '':
            newLine += w
        else:
            newLine += ' ' + w

“BSTag”是“Sentence Begins”的标签,“ESTag”是“Sentence Ends”:所谓的“分隔符”。 “re.sub”用于特殊目的,它在我检查时起作用。

问题在于,当我使用以下命令从linux中的命令行执行此python脚本时:$ cat file.txt | script.py |更少,我看不到任何输出,只是一个空白文件。

对于那些不熟悉linux的人,我猜这个问题与终端执行无关,因此你可以忽略那一部分。简单地说,代码不能按预期工作,我找不到一个错误。

任何帮助将不胜感激,并感谢阅读长篇文章:)


好的,问题解决了,实际上是一个语料库错误而不是编码错误。在文本文件中检测到一个非常奇怪的条目,这导致了问题。删除它解决了它。您可以使用以下两种方法:我和如果您想要类似的文本处理,则使用“snurre”提供的方法。

干杯。

2 个答案:

答案 0 :(得分:1)

def foo(lines):
    output = []
    for line in lines:
        words = line.split()
        if len(words) < 2:
            word = words[0]
        else:
            word = words[1]
        if word == '</S>+ESTag':
            yield ' '.join(output)
            output = []
        elif word != '<S>+BSTag':
            output.append(words[1])

for sentence in foo(sys.stdin):
    print sentence

你的正则表达式有点时髦。据我所知,它正在用[取代(包括)一对]''之间的任何内容,因此它最终会打印出空字符串。

答案 1 :(得分:0)

我认为问题是脚本没有被执行(除非你刚刚在你发布的代码中排除了shebang

试试这个

cat file.txt | python script.py | less