やりたいこと(例)
違和感を感じる日本語ではあると思いますが
飲食店に飲食するために来た人は老人
↑を
[するため,来た,飲食,老,店,人,に,は]
上記リストにある言葉に合わせて分割
出力後
[飲食,店,に,飲食,するため,に,来た,人,は,老,人]
↑のような結果を出力したいのですがどうすべきでしょうか?
ご教授お願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
パフォーマンス考えたら多分正規表現ライブラリに任せるのが良いので,リストをorでつなげたパターンにしてre.findallとかですかね
py
1import re 2 3text = '飲食店に飲食するために来た人は老人' 4words = ['するため','来た','飲食','老','店','人','に','は'] 5 6ptn = '|'.join(words) 7# -> 'するため|来た|飲食|老|店|人|に|は' 8 9res = re.findall(ptn, text) 10# -> ['飲食', '店', 'に', '飲食', 'するため', 'に', '来た', '人', 'は', '老', '人']
投稿2020/11/28 11:02
編集2020/11/28 11:07総合スコア1332
0
老人のような単語は分割しないで欲しいと思いました。
また、分割できなかった部分の処理も気になります。
そこで以下のようなコードを作ってみました。
なお、キーワード引数 error_raise にTrue を指定すると、エラーを出して停止します。
python
1def split_by_word(sentence, word_list, error_raise=False): 2 return split_by_word_sub(sentence, sorted(word_list, key=len, reverse=True), error_raise) 3 4def split_by_word_sub(sentence, word_list, error_raise): 5 if sentence == '': 6 return [] 7 elif word_list == []: 8 if error_raise: 9 raise ValueError('Cannot split ' + sentence) 10 else: 11 return [sentence] 12 else: 13 top_word = word_list[0] 14 split_sentence = sentence.split(top_word) 15 result = split_by_word_sub(split_sentence[0], word_list[1:], error_raise) 16 for sub_sentence in split_sentence[1:]: 17 result += ([top_word] + split_by_word_sub(sub_sentence, word_list[1:], error_raise)) 18 return result 19 20if __name__ == '__main__': 21 SENTENCE = '飲食店に飲食するために来た人達は老人' 22 WORDS = ['するため', '来た', '飲食', '老', '店', '人', 'に', 'は', '老人'] 23 24 print(split_by_word(SENTENCE, WORDS)) 25 26#['飲食', '店', 'に', '飲食', 'するため', 'に', '来た', '人', '達', 'は', '老人'] 27
投稿2020/11/28 12:47
総合スコア24670
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
Python
1s = '飲食店に飲食するために来た人は老人' 2words = ['するため', '来た', '飲食', '老', '店', '人', 'に', 'は'] 3 4a = '' 5result = [] 6for i in list(s): 7 a += i 8 if a in words: 9 result.append(a) 10 a = '' 11 12print(result) 13# ['飲食', '店', 'に', '飲食', 'するため', 'に', '来た', '人', 'は', '老', '人'] 14````list(s)`でバラバラにして、繰り返しでくっつけてって`words`にあったら`result`に追加していきます。
投稿2020/11/28 10:52
総合スコア2722
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。