Skip to main content
 首页 » 编程设计

python之将单词合并成一行

2025年05月04日9txw1958

我目前正在使用 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”将在后面加起来成为一个句子。顺便说一句,很抱歉介绍很长。

这是我的代码:

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”是“句子开始”的标记,“ESTag”是“句子结束”的标记:所谓的“定界符”。 “re.sub”用于特殊目的,据我检查它是有效的。

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

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

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


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

干杯。

请您参考如下方法:

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 

您的正则表达式有点古怪。据我所知,它正在用 '' 替换(包括)一对 [ 和 ] 之间的任何内容,因此它最终打印空字符串。