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

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

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

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

Q&A

解決済

2回答

2060閲覧

pythonでキーワードを含むレビュー抽出

kohekoh

総合スコア140

Python

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

0グッド

0クリップ

投稿2017/06/15 02:54

タイトルの通りです

pythonを用いてキーワードを含むレビューを抽出したいです

{"votes": {"funny": 0, "useful": 0, "cool": 0},
"user_id": "V6M_r-RE1uV39jqJgE0Ndg",
"review_id": "lo8H0qPFV59UBoI911-M7w",
"stars": 5,
"date": "2016-01-16",
"text": "Top notch service, well prepared food, and great, clean atmosphere
\nOur server, who we’ll just refer to as "t" did a fantastic job.",
"type": "review",
"business_id": "BO0zz8gort7o-6KuecIv3Q"}

このようなデータが多数あるときに
この"text"部分に、ある特定の単語を含むとき、このレビュー全体{}を
抽出してくれるようなプログラムがほしいです

例として、"go"を含むレビューが欲しいとき、"gone"など"go"が入った単語ではなく
"go"のみを含むレビューのみが欲しいです

説明がへたくそなのですが、自分がやりたいことに近いことが
できるようなプログラムや、ライブラリなどがあれば教えてください

また、python以外でこれに適しているものがあればおしえてください
(MySqlでやれたりするのかなとかおもったりしています…わかりませんが)

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

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

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

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

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

guest

回答2

0

ベストアンサー

python

1example = {"votes": {"funny": 0, "useful": 0, "cool": 0}, 2"user_id": "V6M_r-RE1uV39jqJgE0Ndg", 3"review_id": "lo8H0qPFV59UBoI911-M7w", 4"stars": 5, 5"date": "2016-01-16", 6"text": "Top notch service, well prepared food, and great, clean atmosphere\nOur server, who we’ll just refer to as \"t\" did a fantastic job.", 7"type": "review", 8"business_id": "BO0zz8gort7o-6KuecIv3Q"} 9example_with_space = example.copy() 10example_with_space['text'] += ' python' 11example_with_nospace = example.copy() 12example_with_nospace['text'] += 'python' 13example_with_linesep = example.copy() 14example_with_linesep['text'] += '\npython' 15 16reviews = ( 17 example, 18 example_with_space, 19 example_with_nospace, 20 example_with_linesep, 21) 22 23 24def where(attr, word): 25 def closure(review): 26 return word in review[attr].split() 27 return closure 28 29 30reviews_py_included = tuple(filter(where('text', 'python'), reviews)) 31 32print(len(reviews_py_included)) 33print(reviews_py_included)

実行してみると2と全体とおっしゃってる情報2件が表示されるかと思います。Pythonの文字列.split()はスペース区切りに便利です。あとはfilterとクロージャをうまく使えばスッキリかけます。

投稿2017/06/15 03:55

YouheiSakurai

総合スコア6142

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

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

YouheiSakurai

2017/06/15 03:57

もしかするとwhere(attr, word)はwhere_in(word, attr)の方がよりスッキリしたかもしれませんがそこは本質ではないのでそのままにしておきます。
kohekoh

2017/06/15 11:33

ありがとうごさいます!
guest

0

テキストデータを文法的な情報に基づいて解析して形態素(言語の最小単位)に分解することを形態素解析と言います。

今回の例では、とりあえず、テキスト情報を形態素解析エンジンに入れて品詞分解を行い、抽出したい単語を検出するという手順を踏むとよいのではないでしょうか。

Python使用できるでの形態素解析エンジンとしては、
日本語用:"Mecab"
英語用:"TreeTagger"
あたりが有名です。
他にも多々あると思いますので、検索してみてください。

投稿2017/06/15 03:19

magichan

総合スコア15898

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

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

kohekoh

2017/06/15 03:26

やはりそうなりますか… 検出する際のライブラリとかはありますか?
magichan

2017/06/15 04:13

検出はとくにライブラリ等を使わなくても、 とりあえずは単純に形態素解析結果から、 ・"名詞"のみを抽出する ・抽出した"名詞"毎に出現頻度をカウントする という方法でよいのではないでしょうか。
kohekoh

2017/06/15 11:19

ありがとうございます 参考にさせていただきます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問