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

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

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

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

Chrome extension

Chrome拡張機能

Q&A

1回答

470閲覧

本文を抽出してmecabで形態素分析したい!

SoraSue

総合スコア30

Python

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

Chrome extension

Chrome拡張機能

0グッド

1クリップ

投稿2017/09/10 03:26

編集2017/09/10 10:24

###前提・実現したいこと
現在、chrome拡張機能を作っています。ユーザーが見たページのURLをサーバー側に送って、そのURL先のページの本文を抽出しそれをmecabで形態素分析したいです。

###追加事項
(2017/09/10 19:22追加)
本文抽出したデータをデータベースに送ってみると、きちんとstr型として保存されていました。そのため、本質的に問題は以下の⑵だけになります。
###発生している問題・エラーメッセージ
問題点は2つあります。
⑴str型で本文抽出ができない。←解決しました!
<Python, readability, html2text, urllib> HTMLから本文抽出。を参考に、pythonのcgiで本文を抽出しようとしました。しかし、取得したデータをjavascriptに送ってコンソールに表示させると、bytes型として出てきます。デコードしても直りませんでした。
また、

<!--: spam Content-Type: text/html <body bgcolor="#f0f0f8"><font color="#f0f0f8" size="-5"> --> <body bgcolor="#f0f0f8"><font color="#f0f0f8" size="-5"> --> --> </font> </font> </font> </script> </object> </blockquote> </pre> </table> </table> </table> </table> </table> </font> </font> </font>

というエラーも出ていました。

⑵mecabが動かない
MeCab と mecab-ipadic-NEologd と Python3 で形態素解析を参考に、文章をmecabで形態素解析しようとしました。しかし、⑴と同じように以下のエラーが出ました。

<!--: spam Content-Type: text/html <body bgcolor="#f0f0f8"><font color="#f0f0f8" size="-5"> --> <body bgcolor="#f0f0f8"><font color="#f0f0f8" size="-5"> --> --> </font> </font> </font> </script> </object> </blockquote> </pre> </table> </table> </table> </table> </table> </font> </font> </font>

###該当のソースコード
以下が実行させたpythonコードです。

python

1#!/usr/local/bin/python3.6 2 3print("Content-Type: text/html; charset=UTF-8") 4print() 5 6import cgi 7import cgitb; cgitb.enable() 8import json 9from readability.readability import Document 10import urllib 11import html2text 12import MeCab 13 14form = cgi.FieldStorage() #ajaxでユーザーが訪れたurlを送っています。 15for key in form.keys(): 16 url = form.getvalue(key) #ここのurlはきちんと取得できています。 17 html = urllib.request.urlopen(url) 18 s = html.read() 19 print(s) #bytes型として帰ってきます。 20 article = Document(s).summary() 21 text = html2text.html2text(article) 22 text = text.decode("utf-8") 23 print(text) #bytes型として帰ってきます。 24 25 tagger = MeCab.Tagger('-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd') 26 tagger.parse('') #python3でmecabを実行するにはこれが必要らしいので入れました。 27 input = '今週末は金剛山に登りに行って、そのあと新世界かどっかで打ち上げしましょ。' #⑴と⑵の問題を別々に検証するために、mecabにはあらかじめ用意した例文を入れます。 28 29 result = tagger.parse(input) 30 print(result) 31 32 node = tagger.parseToNode(input) 33 target_parts_of_speech = ('名詞', ) 34 while node: 35 if node.feature.split(',')[0] in target_parts_of_speech: 36 print(node.surface) 37 node = node.next

###試したこと

<!--: spam Content-Type: text/html <body bgcolor="#f0f0f8"><font color="#f0f0f8" size="-5"> --> <body bgcolor="#f0f0f8"><font color="#f0f0f8" size="-5"> --> --> </font> </font> </font> </script> </object> </blockquote> </pre> </table> </table> </table> </table> </table> </font> </font> </font>

というエラーがよく出るので、このエラーについて検索してみました。その結果、これが例外処理のエラーということがわかったのですが、このエラーをどうやって直せるのかわかりません。
###補足情報(言語/FW/ツール等のバージョンなど)
開発環境は以下の通りです。

  • macOS Sierra
  • python3
  • MAMP バージョン4.2

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

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

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

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

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

guest

回答1

0

python

1tagger = MeCab.Tagger('-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd') 23tagger = MeCab.Tagger ("-Ochasen") 4にして、 5tagger.parse('') 6を消したらいけるはずです。

投稿2017/09/29 12:00

sizumita

総合スコア196

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問