章のリストが与えられている場合、各章の最初の単語まで章と数字を削除できます。
import itertools as it
chapters = [
"Chapter 1 It is a truth universally acknowledged ...",
"Chapter 2 Mr. Bennet was among the earliest ...",
"Chapter 3 Not all that Mrs. Bennet, however, with ...",
]
コード
pred = lambda x: (x == "Chapter") or x.isdigit()
results = [list(it.dropwhile(pred, [word for word in chapter.split()])) for chapter in chapters]
results
出力
[['It', 'is', 'a', 'truth', 'universally', 'acknowledged', '...'],
['Mr.', 'Bennet', 'was', 'among', 'the', 'earliest', '...'],
['Not', 'all', 'that', 'Mrs.', 'Bennet,', 'however,', 'with', '...']]
考える
詳細
リストの理解は、チャプターをリストとリスト内の単語に分割します。等価的に:最後に
for chapter in chapters:
print([word for word in chapter.split()])
# ['Chapter', '1', 'It', 'is', 'a', 'truth', 'universally', 'acknowledged', '...']
# ['Chapter', '2', 'Mr.', 'Bennet', 'was', 'among', 'the', 'earliest', '...']
# ['Chapter', '3', 'Not', 'all', 'that', 'Mrs.', 'Bennet,', 'however,', 'with', '...']
、itertools.dropwhile
反復処理し、各リストと述語が長く真でなくなるまでの項目を削除します。言い換えれば、項目を先に落として、"Chapter"
でも数字でもないようにしてください。
結果の章は、必要に応じて文字列として再結合することができます。
[" ".join(chapter) for chapter in results]
# ['It is a truth universally acknowledged ...',
# 'Mr. Bennet was among the earliest ...',
# 'Not all that Mrs. Bennet, however, with ...']
あなたは 'for'ループ内に無条件の' return'文を持っています。これは一般的に悪い兆候です。なぜなら、最初の反復の後、つまり '' Chapter 0 "'の置換を行った後でループを終了するからです。 –
編集しましたが、それでも正しく読み込まれません。 –
for-loop 'chapter_text = chapter_header [:]'の前。そして、あなたのリストの理解の中で、 'chapter_header'ではなく' chapter_text'を繰り返します。そしてループからループを戻す。 –