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

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

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

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

Q&A

解決済

3回答

7004閲覧

Pythonで複数キーワードが含まれるテキストの検索

teratailxyz

総合スコア11

Python

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

1グッド

2クリップ

投稿2017/01/09 09:36

###前提・実現したいこと

Pythonで複数キーワード(単語)が含まれるテキストを検索したいです。
キーワードの数はユーザー入力次第で変化しますが、2~5個程度の想定です。
キーワードがテキストに全て含まれている必要はありません。
キーワードが含まれる数が多い順に、検索結果を表示したいです。

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

Python初学者でどういったアプローチで考えていけばよいかの手がかりがつかめていません。
何をどう調べていけばよいのか、方向性をご教示頂けませんでしょうか。

hinata1710👍を押しています

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

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

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

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

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

guest

回答3

0

ベストアンサー

どの程度の規模のテキストからどの程度の頻度で検索するのか、また期待するレスポンス速度にもよりますが、ある程度の規模でやるなら、全文検索はインデックスを作る方がいいかもしれませんね。

Wikipediaを検索する形態素解析型の全文検索エンジンを実装します。検索文字列と各記事の類似度を計算して、類似度順に検索結果を表示することで全文検索を実現します。高速に検索するために索引と逆索引を実装していきます。

形態素解析型の全文検索エンジンを実装してWikipediaを全文検索 - Qiita

今回はこのwhooshを使って手元のMLを検索してみる、全文検索ツールを試しに作ってみました。

Python純正の全文検索ライブラリ、Whooshを使ってみた - そこはかとなく書くよ。

投稿2017/01/12 04:17

Lhankor_Mhy

総合スコア36113

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

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

teratailxyz

2017/01/15 12:12

ご回答ありがとうございます。インデックス、というキーワードすら知らなかったので大変参考になりました。いただいたリンクを参考により詳細調べてみます。
guest

0

書いてみました。
キーワードとその出現回数を辞書として持っています。

python

1f = open("testdata",'r') 2keyword = {"aaa" : 0 , "bbb" : 0 , "ccc" : 0 } 3for line in f: 4 for word in keyword.keys() : 5 keyword[word] = keyword[word] + line.count(word) 6f.close() 7 8print sorted(keyword.items(), key=lambda x: x[1], reverse=True) 9

投稿2017/01/12 03:44

yoshi777

総合スコア674

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

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

teratailxyz

2017/01/15 12:15

ご回答ありがとうございます。こういったコードの書き方になるんですね、勉強になります。入門書参考に文法を読み解いてみます。
guest

0

もう既に変数 text にテキストがあり、keyword に検索キーワードが入っているのであれば、次のようにしてキーワードの数を取得することができます。

python

1#!/usr/bin/env python3 2# utf-8 3 4text = "こんにちは。こけこっこ。" 5keyword = "こ" 6 7print(text.count(keyword)) # 4

並べ替えは色々な方法があります。例えば、テキストをキー、count() の結果をバリューにした辞書を作って、次のようにすれば、ソート済みのリストが得られます。

python

1sorted_list = sorted(d.items(), key=lambda x: x[1])

投稿2017/01/09 12:51

mahata

総合スコア62

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

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

teratailxyz

2017/01/15 12:16

ご回答ありがとうございます。私の質問の仕方が悪く申し訳有りませんでしたが、キーワードは文字ではなく単語を考えていました。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問