6

現在pythonを学んでいて、少し問題があります。私は別のサブプログラムから行を取り出して、いくつかの句読点を取り除いた別の単語に変換しようとしています。このプログラムの出力は、単語とそれが表示される行番号であると想定されています。次のようになります -> 単語: [1]

入力ファイル:

please. let! this3 work.
I: hope. it works
and don't shut up

コード:

    def createWordList(line):
        wordList2 =[]
        wordList1 = line.split()
        cleanWord = ""
        for word in wordList1: 
            if word != " ":
                for char in word:
                    if char in '!,.?":;0123456789':
                        char = ""
                    cleanWord += char
                    print(cleanWord," cleaned")
                wordList2.append(cleanWord)
         return wordList2

出力:

anddon't:[3]
anddon'tshut:[3]
anddon'tshutup:[3]
ihope:[2]
ihopeit:[2]
ihopeitworks:[2]
pleaselet:[1]
pleaseletthis3:[1]
pleaseletthis3work:[1]

これが原因かはわかりませんが、Ada を学び、短期間で Python に移行しました。

4

2 に答える 2

12

もちろん、正規表現を使用することもできます。

>>> import re
>>> s = """please. let! this3 work.
... I: hope. it works
... and don't shut up"""
>>> re.findall(r'[^\s!,.?":;0-9]+', s)
['please', 'let', 'this', 'work', 'I', 'hope', 'it', 'works', 'and', "don't", 
 'shut', 'up']
于 2012-10-26T16:36:31.643 に答える
4

cleanWord外側のループの各反復の先頭で空の文字列に戻す必要があります。

def createWordList(line):
    wordList2 =[]
    wordList1 = line.split()
    for word in wordList1:
        cleanWord = ""
        for char in word:
            if char in '!,.?":;0123456789':
                char = ""
            cleanWord += char
        wordList2.append(cleanWord)
    return wordList2

if word != " "line.split()にはスペースがなくなるため、も削除したことに注意してください。

>>> createWordList('please. let! this3 work.')
['please', 'let', 'this', 'work']
于 2012-10-26T16:32:08.117 に答える