現在、タブに区切られていないtxtファイルをcsvファイル形式に変換しようとしています。
色々と検索してみましたが、初心者なものでいまいち良い考えが浮かびません・・・。
ファイルの内容としては以下のように複数の新聞記事が羅列されているものです。
日付、タイトル(含む副題)、本文(複数段落)のみを列の項目にしてそれ以外の情報は捨象し、csv形式に変換したいのですが、何か方法はあるでしょうか。
Le Monde (新聞社名)
Economie, mardi 13 mars 2012 30 mots, p. 16 (カテゴリ・日付・文字数・ページ数)
ECONOMIE (サブカテゴリ)
En baisse(サブタイトル?)
Le Japon(タイトル)
本文1行のみ.
© 2012 SA Le Monde. Tous droits réservés. Le présent document est protégé par les lois et conventions internationales sur le droit d'auteur et son utilisation est régie par ces lois et conventions.
Certificat émis le 31 juillet 2020 à ECOLE-NATIONALE-D'ADMINISTRATION à des fins de visualisation personnelle et temporaire.
news·20120313·LM·0q1303_527225
Le Monde (新聞社名)
Environnement & Sciences, lundi 12 mars 2012 489 mots, p. 9 (カテゴリ・日付・文字数・ページ数)
Planète (サブカテゴリ)
L'APRÈS-FUKUSHIMA Le Japon, l'année d'après la vague ENTRETIEN(サブタイトル)
Pierre-François Souyri « Les gens de Fukushima se sentent comme des sacrifiés »(タイトル)
本文1行目
本文2行目
本文3行目.
本文4行目
本文5行目.
(以下記事本文略)
© 2012 SA Le Monde. Tous droits réservés. Le présent document est protégé par les lois et conventions internationales sur le droit d'auteur et son utilisation est régie par ces lois et conventions.
Certificat émis le 31 juillet 2020 à ECOLE-NATIONALE-D'ADMINISTRATION à des fins de visualisation personnelle et temporaire.
news·20120312·LM·0q1103_526673
(以下略)
※著作権上、記事本文は掲載しておりません。
一応以下のとおり自分なりに実装してみましたが、記事本文を一塊にしてリストに追加する方法がわからず、一つの記事が複数のバラバラの要素としてリストに追加されてしまっています。
当然の帰結として「日付」リスト(list_categorie_date)の要素数と「本文」(list_text)リストの要素数が合致せずにエラーメッセージ「ValueError: arrays must all be same length」が表示されます。
また、以下ソースコードのような単純なfor文の記述では、記事カテゴリ(ex. Environnement & Sciences)と日付、文字数(mots)とページ数が分離できないだけでなく、タイトル・副題・筆者名・本文も一体となってしまいますが、良い解決方法が思い浮かびません。
ソースコード
Python
1import pandas as pd 2 3with open('/Users/hankechi78/Desktop/lemonde_test/articles/13032012-21032011lemonde_Japon_articles.txt', encoding='utf-8') as f: 4 lines = f.readlines() 5 6lines_strip = [line.strip() for line in lines] 7 8#日付の含まれる行には必ず「mots, p. 」という文字列があることに着目(ただし、これでは不要な情報であるカテゴリ・ページ数を日付の情報から分離できない) 9list_categorie_date = [line for line in lines_strip if ' mots, p. ' in line] 10 11list_text = [] 12#不要な部分をif文で全て排除しながらリストにfor文で一文ずつ追加していく 13for line in lines_strip: 14 if (not line.startswith('Le Monde') 15 and not ' mots, p. ' in line 16 and not line.startswith('©') 17 and not line.startswith('Certificat émis le 31 juillet 2020') 18 and not line.startswith('news·20')): 19 list_text.append(line) 20#これではタイトル・副題・筆者名・記事本文が区別できない上に同じ記事がバラバラの要素としてリストに保存されてしまいますが、他に思いつきません・・・ 21 22df_lemonde = pd.DataFrame( 23 {'categorie_and_date': list_categorie_date, 24 'text': list_text 25 }) 26 27df.to_csv('lemonde_test')
発生している問題・エラーメッセージ
Traceback (most recent call last): File "csv_convert.py", line 19, in <module> df_lemonde = pd.DataFrame( File "/Users/hankechi78/opt/anaconda3/lib/python3.8/site-packages/pandas/core/frame.py", line 435, in __init__ mgr = init_dict(data, index, columns, dtype=dtype) File "/Users/hankechi78/opt/anaconda3/lib/python3.8/site-packages/pandas/core/internals/construction.py", line 254, in init_dict return arrays_to_mgr(arrays, data_names, index, columns, dtype=dtype) File "/Users/hankechi78/opt/anaconda3/lib/python3.8/site-packages/pandas/core/internals/construction.py", line 64, in arrays_to_mgr index = extract_index(arrays) File "/Users/hankechi78/opt/anaconda3/lib/python3.8/site-packages/pandas/core/internals/construction.py", line 365, in extract_index raise ValueError("arrays must all be same length") ValueError: arrays must all be same length
補足
「Le Monde」〜「news·20XXXXXX·LM·0q2003_33XXXX」で一つの記事のブロックになっており、「© 20・・・」、「Certificat émis ・・・」の部分は同じ文字列が毎回繰り返されています。
副題や筆者名が無い記事も混在し、また文章の段落数も当然ながらまちまちです。
なお、list_categorie_dateを表示すると以下のとおりです。
'Economie, mardi 13 mars 2012 30 mots, p. 16', 'Environnement & Sciences, lundi 12 mars 2012 489 mots, p. 9', 'Environnement & Sciences, lundi 12 mars 2012 390 mots, p. 11', 'Environnement & Sciences, lundi 12 mars 2012 661 mots, p. 9', 'Environnement & Sciences, lundi 12 mars 2012 604 mots, p. 11', 'Environnement & Sciences, lundi 12 mars 2012 460 mots, p. 9', 'Environnement & Sciences, lundi 12 mars 2012 447 mots, p. 11', 'Environnement & Sciences, lundi 12 mars 2012 32 mots, p. 11', 'Environnement & Sciences, lundi 12 mars 2012 372 mots, p. 10', 'Environnement & Sciences, lundi 12 mars 2012 1041 mots, p. 8', 'Environnement & Sciences, lundi 12 mars 2012 295 mots, p. 10', 'Environnement & Sciences, lundi 12 mars 2012 87 mots, p. 11', 'Environnement & Sciences, lundi 12 mars 2012 84 mots, p. 11', 'Environnement & Sciences, lundi 12 mars 2012 444 mots, p. 10', 'Environnement & Sciences, lundi 12 mars 2012 112 mots, p. 8', 'A la Une, lundi 12 mars 2012 27 mots, p. 1', (以下略)
また、list_textを表示すると以下のとおりです。
['', '', 'ECONOMIE', 'En baisse', 'Le Japon', "本文(1行のみ).", '', '', '', '', '', '', '', 'Planète', "L'APRÈS-FUKUSHIMA Le Japon, l'année d'après la vague ENTRETIEN", 'Pierre-François Souyri « Les gens de Fukushima se sentent comme des sacrifiés »', "本文1行目", '本文2行目', "本文3行目", (以下記事本文略), '', '', '', '', '', '', '', (以下略)
※著作権上、記事本文を記載しておりません
回答2件
あなたの回答
tips
プレビュー