1

ブログをGoogleのXML形式でバックアップしました。かなり長いです。これまでのところ、私はこれを行いました:

>>> import feedparser
>>> blogxml = feedparser.parse('blog.xml')
>>> type(blogxml)
<class 'feedparser.FeedParserDict'>

私が読んでいる本では、著者はこれを行っています:

>>> import feedparser
>>> llog = feedparser.parse("http://languagelog.ldc.upenn.edu/nll/?feed=atom")
>>> llog['feed']['title'] u'Language Log'
>>> len(llog.entries) 15
>>> post = llog.entries[2]
>>> post.title u"He's My BF"
>>> content = post.content[0].value
>>> content[:70] u'<p>Today I was chatting with three of our visiting graduate students f'
>>> nltk.word_tokenize(nltk.html_clean(content))

そして、それはエントリーごとに私のために働きます。ご覧のとおり、NLTKを使用してHTMLをクリーンアップする方法はすでにあります。しかし、私が本当に望んでいるのは、すべてのエントリを取得し、HTMLを削除して(私はすでに方法を知っていて、方法を尋ねていません。質問をもう少し注意深く読んでください)、ファイルに次のように書き込むことです。プレーンテキスト文字列。これは、feedparserを正しく使用することと関係があります。それを行う簡単な方法はありますか?

アップデート:

結局のところ、私はそれを行う簡単な方法を見つけることにまだ近づいていません。Pythonに不慣れだったため、少し醜いことをしなければなりませんでした。

これは私がやろうと思ったことです:

import feedparser
import nltk

blog = feedparser.parse('myblog.xml')

with open('myblog','w') as outfile:
    for itemnumber in range(0, len(blog.entries)):
        conts = blog.entries[itemnumber].content
        cleanconts = nltk.word_tokenize(nltk.html_clean(conts))
        outfile.write(cleanconts)

それで、@ Rob Cowieさん、どうもありがとうございましたが、あなたのバージョン(見栄えが良い)は機能しませんでした。先に指摘しなかったり、答えを受け入れたりするのは気の毒ですが、このプロジェクトに取り組む時間があまりありません。私が下に置いたものは私が仕事に取り掛かることができるすべてです、しかし誰かがもっとエレガントな何かを持っている場合に備えて私はこの質問を開いたままにしておきます。

import feedparser
import sys

blog = feedparser.parse('myblog.xml')
sys.stdout = open('blog','w')

for itemnumber in range(0, len(blog.entries)):
    print blog.entries[itemnumber].content

sys.stdout.close()

次に、Pythonのstdoutを閉じずに開いているファイルを閉じる方法がわからなかったため、インタープリターからCtrlキーを押しながらDキーを押しました。次に、インタプリタを再入力し、ファイルを開いてファイルを読み取り、そこからHTMLをクリーンアップしました。(nltk.html_cleanは、NLTKブック自体のオンラインバージョンのタイプミスです...ちなみに、実際にはnltk.clean_htmlです)。私が最終的に得たのは、ほとんど、しかし完全ではない平文でした。

4

1 に答える 1

1
import feedparser
llog = feedparser.parse("http://languagelog.ldc.upenn.edu/nll/?feed=atom")

with open('myblog.txt', 'w') as outfile:
    for entry in llog.entries:
        ## Do your processing here
        content = entry.content[0].value
        clean_content = nltk.word_tokenize(nltk.html_clean(content))
        outfile.write(clean_content)

基本的に、ファイルを開き、エントリ(feed.entries)を繰り返し、必要に応じてエントリを処理し、ファイルに適切な表現を書き込む必要があります。

テキストファイルの投稿コンテンツをどのように区切るかについては、私は想定していません。このスニペットは、投稿のタイトルやメタデータもファイルに書き込みません。

于 2011-07-03T09:08:13.747 に答える