0

パイプ(および必要に応じて追加のPythonスクリプト)を使用して、テキストから最も頻繁に使用される10個の単語を抽出する必要があります。出力は、スペースで区切られたすべて大文字の単語のブロックです。このパイプは、外部ファイルからテキストを抽出する必要があります。.txtファイルで機能させることができましたが、URLを入力して、同じことを実行できるようにする必要もあります。

私は次のコードを持っています:

alias words="tr a-zA-Z | tr -cs A-Z | tr ' ' '\012' | sort -n | uniq -c | 
sort -r | head -n 10 | awk '{printf \"%s \", \$2}END{print \"\"}'" (on one line)

これは、私にcat hamlet.txt | words与えます:

TO THE AND A  'TIS THAT OR OF IS

さらに複雑にするために、「機能語」の単語を除外する必要があります。これらは、「a」、「the」、「of」、「is」、任意の代名詞(I、あなた、彼)のような「非語彙」の単語です。 、および任意の前置詞(there、at、from)。

htmlstrip http://www.google.com.au | words上記のように入力して印刷できるようにする必要があります。

URLを開く場合:私が理解しようとしているPythonスクリプト(htmlstripと呼びましょう)は、テキストからすべてのタグを取り除き、「人間が読める」テキストのみを残します。これにより、任意のURLを開くことができるはずですが、これを機能させる方法がわかりません。私がこれまでに持っているもの:

import re
import urllib2
filename = raw_input('File name: ')
filehandle = open(filename)
html = filehandle.read()

f = urllib2.urlopen('http://') #???
print f.read()

text = [ ]
inTag = False


for ch in html:
    if ch == '<':
        inTag = True
    if not inTag:
        text.append(ch)
    if ch == '>':
        inTag = False

print ''.join(text)

私はこれが不完全であり、おそらく正しくないことを知っています-どんなガイダンスも本当にありがたいです。

4

3 に答える 3

0

これに使用re.subします:

import re

text = re.sub(r"<.+>", " ", html)

スクリプトなどの特殊なケースでは、次のような正規表現を含めることができます。

<script.*>.*</script>
于 2012-05-20T15:20:05.623 に答える
0

次のようなscrap.pyおよび正規表現を使用できます。

#!/usr/bin/env python

from scrape import s
import sys, re

if len(sys.argv) < 2:
    print "Usage: words.py url"
    sys.exit(0)

s.go(sys.argv[1]) # fetch content
text = s.doc.text # extract readable text
text = re.sub("\W+", " ", text) # remove all non-word characters and repeating whitespace
print text

そしてちょうど: ./words.py http://whatever.com

于 2012-05-20T15:32:02.760 に答える
0

更新:申し訳ありませんが、追加モジュールなしの純粋なPythonに関するコメントを読んでください。はい、この状況reでは、私は、最善の方法になると思います。

たぶん、pycURLタグを削除するよりも、使用する方が簡単で正確reです。

from StringIO import StringIO    
import pycurl

url = 'http://www.google.com/'

storage = StringIO()
c = pycurl.Curl()
c.setopt(c.URL, url)
c.setopt(c.WRITEFUNCTION, storage.write)
c.perform()
c.close()
content = storage.getvalue()
print content
于 2012-05-20T15:38:37.390 に答える