2017-09-05 21 views
0

私はテキストマイニングの初心者で、おもちゃプロジェクトでウェブサイトのテキストを処理し、それをトークンに分割しています。しかし、Beautifulsoupを使用してコンテンツをダウンロードした後、私は次のコードBeautifulsoupを使用してテキストトークンを取得する方法

# -*- coding: utf-8 -*- 
import nltk 
import operator 
import urllib3 
from bs4 import BeautifulSoup 

http = urllib3.PoolManager() 
url= 'http://python.org/' 
response = http.request('GET',url) 
# nltk.clean_html is dropped by NTLK 
clean = BeautifulSoup(response.data,"html5lib") 
# clean will have entire string removing all the html noise 
tokens = [tok for tok in clean.split()] 
print tokens[:100] 

.split方法でそれを分割することができなかったPythonは

TypeError: 'NoneType' object is not callable 

が前stackoverflow questionよると教えてくれました、それはその

事実によるものです

クリーンは文字列ではなく、bs4.element.Tagです。 を分割して調べると、その魔法が実行され、 という名前のサブ要素が見つかっていますが、その部分要素はありません。あなたはどのように私は私のコードのトークンを取得するための私の目標を達成するために調整する必要があり、そのどれもここで

呼び出しされていませんか?ありがとうございました。

+3

ほとんどあなたがBeautifulSoupのドキュメントを読んでいないように私には見えます。便利な方法でページからトークンを取得する単一の方法はありません。各ページの調査をする必要があります。 –

+0

[BeautifulSoupの表示可能なWebページのテキスト]([https://stackoverflow.com/questions/1936466/beautifulsoup-grab-visible-webpage-text])の重複の可能性あり – Kos

答えて

1

あなたはHTMLからテキストだけを返すと、次のようにNLTK word_tokenize()にそれを渡すためにget_text()を使用することができます。

from bs4 import BeautifulSoup 
import requests 
import nltk 

response = requests.get('http://python.org/').content 
soup = BeautifulSoup(response, "html.parser") 
text_tokens = nltk.tokenize.word_tokenize(soup.get_text()) 

print text_tokens 

(あなたはまた、あなたのデータを取得するためにurllib3を使用することができます)

これはです

[u'Welcome', u'to', u'Python.org', u'{', u'``', u'@', u'context', u"''", u':'... 

単語にのみ興味がある場合は、返されたリストをさらにフィルタリングして、例えばのみpuncutationと居住、:https://www.crummy.com/software/BeautifulSoup/bs4/doc/:

text_tokens = [t for t in text_tokens if not re.match('[' + string.punctuation + ']+', t)] 
+0

ありがとう、それは私の問題を解決しました – zlqs1985

関連する問題