質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

Q&A

解決済

3回答

1619閲覧

pythonでreplaceとstripを用いて単語(接続詞)を削除し、文を個別でリストに格納するときのエラー

退会済みユーザー

退会済みユーザー

総合スコア0

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

0グッド

0クリップ

投稿2020/07/16 14:38

前提・実現したいこと

実現したいことはPythonのreplaceとstrip関数を用いて、単語(接続詞)を削除して、別の文として配列に格納することです。

具体的には以下の出力を実現したいです。

text1 = 'The fire snapped as it grew.' text2 = 'Tom cooks dinner and Alice washes her hand.' #出力 ['The fire snapped', 'it grew.'] ['Tom cooks dinner', 'Alice washes her hand.']

pythonでstripを用いるとリストで指定していない単語まで削除されるエラー」という前に投稿した質問と単語を削除する部分で実現したい同じなので、関連します。

発生している問題・エラーメッセージ

現在のコードで、text1はうまくいっているのですが、テキスト2で以下のように失敗してしまいます。
どのように修正すべきかアドバイスをいただきたいです。

['The fire snapped', 'it grew.'] ['Tom cook dinner and Alice w', 'h her hand.']

該当のソースコード

python

1text = 'Tom cooks dinner and Alice washes her hand.' 2ignore_words = ['as', 'and'] 3 4ret = [] 5for word in text.split(' '): 6 ignore = len(word) <= 0 # スペースは不要 7 for iw in ignore_words: 8 if word == iw: 9 ignore = True 10 text = text.replace(word,',').strip() 11 break 12 13text = [x.strip() for x in text.split(',') if not x.strip() == ''] 14print(text)

試したこと

pythonでstripを用いるとリストで指定していない単語まで削除されるエラー」という前に投稿した質問でいただいたご回答は、実際に自分でも動かしてみて、今回のコードを作成する時に、参考にさせていただきました。

python

1text = 'The fire snapped as it grew.' 2ignore_words = ['as', 'it'] 3 4ret = [] 5for word in text.split(' '): 6 ignore = len(word) <= 0 # スペースは不要 7 for iw in ignore_words: 8 if word == iw: 9 ignore = True 10 break 11 if not ignore: 12 ret.append(word) 13 14text = ' '.join(ret) 15print(text) 16 17#出力 18The fire snapped grew.

補足情報(FW/ツールのバージョンなど)

Python 3.7.4
jupyter-notebook : 6.0.3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

Python

1text = 'Tom cooks dinner and Alice washes her hand.' 2#text = 'The fire snapped as it grew.' 3 4ignore_words = ['as', 'and'] 5 6ret = [] 7ret_text = [] 8wk_ret = "" 9 10""" 11def find_NG_word(wk_str): 12 for NG_text in ignore_words 13""" 14for wk_text in text.split(): 15 #print (wk_text) 16 if not wk_text in ignore_words: 17 18 wk_ret += wk_text + " " 19 else: 20 wk_ret = wk_ret[:-1] 21 ret_text.append(wk_ret) 22 wk_ret = "" 23 24wk_ret = wk_ret[:-1] 25ret_text.append(wk_ret) 26 27print(ret_text)

投稿2020/07/16 15:53

Reach

総合スコア735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

replace()を使うと、文章中のすべての「as」や「and」が(たとえ単語中にあっても)置換されてしまう。
「見つかった最初の1個だけ置換」を指定することもできるが、それが目的の「as」や「and」だとは限らない。

Python

1#text = 'The fire snapped as it grew. as' 2text = 'Tom cooks dinner and Alice washes her hand. and' 3ignore_words = ['as', 'and'] 4 5ret = [] 6newtext = '' 7for word in text.split(' '): 8 if len(word) <= 0: 9 continue 10 if not word in ignore_words: 11 newtext += word + ' ' 12 continue 13 newtext = newtext.strip() 14 if newtext: 15 ret.append(newtext) 16 newtext = '' 17 18newtext = newtext.strip() 19if newtext: 20 ret.append(newtext) 21 22print(ret)

投稿2020/07/16 15:24

Daregada

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

こんな感じでしょうか。

Python

1ignore_words = ['as', 'and'] 2for text in ['The fire snapped as it grew.', 'Tom cooks dinner and Alice washes her hand.', 'The sun is the sun and as it was.']: 3 tmp = [] 4 for word in text.split(' '): 5 if len(word) > 0: # スペースは不要 6 for iw in ignore_words: 7 if word == iw: 8 word = '\b' # 文章の区切り 9 break 10 tmp.append(word) 11 12 text = ' '.join(tmp) 13 lst = [sen.strip() for sen in text.split('\b') if len(sen.strip()) > 0] # 文章で区切って、文章の前後のスペースは除去 14 print(lst) 15 16# ['The fire snapped', 'it grew.'] 17# ['Tom cooks dinner', 'Alice washes her hand.'] 18# ['The sun is the sun', 'it was.']

投稿2020/07/16 15:03

can110

総合スコア38341

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問