Pythonを使ってWebスクレイピングやテキストマイニングといったテキストに対する処理を行うことがよくあります。ここではテキスト処理の基本である文章中の文字列の検索と抽出方法を習得します。
こんにちは。wat(@watlablog)です。
文章を自由自在に操ることができるようになると、途端に出来ることがひろがります!ここでは、
文章中の文字列検索と抽出の方法を紹介します!
テキスト処理はWebスクレイピングで得た情報の加工や分析を行う上で必須の技術です。
ちなみにWebスクレイピングは僕も参加しているPython特化型学習サイト「PyQ(パイキュー)」で簡単に覚えることができます。
PyQについては「PyQでPython学習!実際に登録してみた感想と気になる価格」で記事を書きましたので、是非参考にしてみて下さい。
テキスト検索と抽出を知っていると生産性が向上する理由
Webスクレイピングのデータを使って情報収集を自動化できる
冒頭でも述べたWebスクレイピングとは、Webという膨大なネットワークの世界からテキストやファイルといった情報を参照することができるプログラミング技術です。
このWebスクレイピングを使えば、株価情報の取得やブログの特定の情報等、日々の情報収集作業ですらプログラミングで自動化することができるようになります。
※但し、Webスクレイピングはサイト毎に規約に沿った使い方をしないと法的な問題に発展するおそれがありますので、ご注意下さい。
業務の自動化の幅が拡がる
普段の皆様のお仕事は多岐に渡ると思います。例えば事務書類の電子データの処理や、何かしらの計算結果を記録したファイルの後処理等…。
そして僕達人間はそういった仕事に日本語や英語といった自然言語で書かれたファイルを使っているはずです。
まさかバイナリファイルを直接読んでる超人はいないですよね。
例えば、僕の場合は科学技術計算に商用の計算コードで書かれたファイルを扱います。
そのファイルにはある波形や設定といった情報が書かれているのですが、毎回決まった行に書かれているわけではありません。
代わりに、「*(アスタリスク)」や「$(ドル)」、「-1」といった自然言語以外の目印が付与されていることがほとんどです。
商用コード等のプログラムでは、この目印を検索して所定の計算をしているのですね。
ということであれば、僕達も書類毎のフォーマットと目印を理解して、テキストを検索したり、特定の数値や単語を抽出することが出来れば、ファイルの自動生成や人がやる作業を取り除く等の生産性向上が可能になります。
Pythonによるテキスト検索と抽出のコード
findとスライスを使う
今回テキストの検索と抽出を行う全コードを以下に示します。
stringに入ったメッセージが今回の検索対象で、wordが検索ワードです。
.findメソッドでwordを検索し、検索対象の文章の何文字目にあるかをindexに納めます。この時、文字は0番目からのカウントになり、検索ワードが見つからない場合は「-1」が返されます。
文字列であろうとも抽出は「Pythonでwavを切り出す!NumPyの配列処理」で使っていた方法と同じなので「なんだこんなもんか」と感じてしまうくらい簡単です。
この抽出方法をスライスと呼びます。
ここでは検索された位置indexを開始位置、indexに検索ワードの文字数len(word)を足した数を終了値にすることで検索ワードだけを全体の文章から抜き出しています。
1 2 3 4 5 6 7 |
# 元の文章 string = 'Welcome to my watlab-blog.com! This web site is introducing about python programing!' word = 'python' # 検索するワード index = string.find(word) # 検索位置(指標) print(index) # 検索位置を表示 print(string[index:index + len(word)]) # 検索位置から文字数分を抽出する |
実行結果は以下になります。検索ワードが0から数えて66文字目であることがわかり、結果として検索ワードの「python」がしっかり抜き出されていました。
1 2 |
66 # index python # 抽出されたword |
あっけないくらい簡単でした!
まとめ
Pythonのfindメソッドとスライスを使えば、簡単に文章中から任意のワードを抽出することができました。
この方法はWebスクレイピングと併用することで十分役に立つ技術となりそうです。
テキストを自由に操ればきっと日常をもっと楽にすることができそうだ!
Twitterでも関連情報をつぶやいているので、wat(@watlablog)のフォローお待ちしています!