1

私は非常にシンプルなCherryPyWebサービスを持っており、より大きなプロジェクトの基盤になることを望んでいますが、NLTKを希望どおりに機能させる必要があります。

私のPythonスクリプトはNLTKをインポートし、NLTKのコロケーション(バイグラム)関数を使用して、プリロードされたデータの分析を行います。

いくつか質問があります。

1)プログラムがコロケーションをブラウザに返さず、コンソールにのみ返すのはなぜですか?

2)を指定している場合from nltk.book import text4、プログラムはサンプルブックのセット全体(text1からtext9)をインポートするのはなぜですか?

私は初心者なので、答えは目の前にあるかもしれませんが、わかりません。

主な質問:コロケーションの結果をコンソールではなくブラウザ(Webサービス)に渡すにはどうすればよいですか?

ありがとう

import cherrypy
import nltk
from nltk.book import text4

class BiGrams:
    def index(self):
        return text4.collocations(num=20)
    index.exposed = True

cherrypy.quickstart(BiGrams())
4

3 に答える 3

3

私はMoby Dickでいくつかの作業を行ってきましたが、先日、特定のテキストを1 つだけインポートするという質問に対する答えに出くわしました。

>>>import nltk.corpus
>>>from nltk.text import Text
>>>moby = Text(nltk.corpus.gutenberg.words('melville-moby_dick.txt'))

したがって、そのファイルのテキストを新しい Text オブジェクトに割り当てるために本当に必要なのは fileid だけです。ただし、gutenberg.words ディレクトリには「文学的な」情報源しかないので注意してください。

とにかく、gutenberg のファイル ID を見つけるには、上記の nltk.corpus をインポートした後、次のコマンドを使用できます。

>>> nltk.corpus.gutenberg.fileids()

['austen-emma.txt', 'austen-persuasion.txt', 'austen-sense.txt', 'bible-kjv.txt',     'blake-poems.txt', 'bryant-stories.txt', 'burgess-busterbrown.txt', 'carroll-alice.txt',   'chesterton-ball.txt', 'chesterton-brown.txt', 'chesterton-thursday.txt', 'edgeworth-parents.txt', 'melville-moby_dick.txt', 'milton-paradise.txt', 'shakespeare-caesar.txt', 'shakespeare-hamlet.txt', 'shakespeare-macbeth.txt', 'whitman-leaves.txt']

ただし、これは特定のコーパス、就任演説に関する質問にはまだ答えていません。その答えについては、次の MIT 論文を見つけました: http://web.mit.edu/6.863/www/fall2012/nltk/ch2-3.pdf

(分析のためにあらゆる種類のテキストデータを取得することについて説明しているため、nltk テキストを使い始める人にはお勧めです)。就任アドレスファイルIDを取得するための答えは、6ページにあります(少し編集されています):

>>> nltk.corpus.inaugural.fileids()
['1789-Washington.txt', '1793-Washington.txt', '1797-Adams.txt', '1801-Jefferson.txt', '1805-Jefferson.txt', '1809-Madison.txt', '1813-Madison.txt', '1817-Monroe.txt', '1821-Monroe.txt', '1825-Adams.txt', '1829-Jackson.txt', '1833-Jackson.txt', '1837-VanBuren.txt', '1841-Harrison.txt', '1845-Polk.txt', '1849-Taylor.txt', '1853-Pierce.txt', '1857-Buchanan.txt', '1861-Lincoln.txt', '1865-Lincoln.txt', '1869-Grant.txt', '1873-Grant.txt', '1877-Hayes.txt', '1881-Garfield.txt', '1885-Cleveland.txt', '1889-Harrison.txt', '1893-Cleveland.txt', '1897-McKinley.txt', '1901-McKinley.txt', '1905-Roosevelt.txt', '1909-Taft.txt', '1913-Wilson.txt', '1917-Wilson.txt', '1921-Harding.txt', '1925-Coolidge.txt', '1929-Hoover.txt', '1933-Roosevelt.txt', '1937-Roosevelt.txt', '1941-Roosevelt.txt', '1945-Roosevelt.txt', '1949-Truman.txt', '1953-Eisenhower.txt', '1957-Eisenhower.txt', '1961-Kennedy.txt', '1965-Johnson.txt', '1969-Nixon.txt', '1973-Nixon.txt', '1977-Carter.txt', '1981-Reagan.txt', '1985-Reagan.txt', '1989-Bush.txt', '1993-Clinton.txt', '1997-Clinton.txt', '2001-Bush.txt', '2005-Bush.txt', '2009-Obama.txt']

したがって、特定の就任演説をテキストとしてインポートできるはずです (上記の「from nltk.text import Text」を行ったと仮定します)。または、上記でインポートした「就任」識別子を使用してそれらを操作できます。たとえば、これは機能します:

>>>address1 = Text(nltk.corpus.inaugural.words('2009-Obama.txt'))

実際、このページの次の例のように、引数なしで inaugural.words を呼び出すことにより、すべての就任演説を 1 つのドキュメントとして扱うことができます。

>>>len(nltk.corpus.inaugural.words())

また

アドレス = テキスト (nltk.corpus.inaugural.words())

1 か月前にこの質問に自分で答えようとしたときにこのスレッドを読んだことを思い出したので、この情報が遅くなった場合は、どこかで誰かに役立つかもしれません。

(これは Stack Overflow への私の最初の貢献です。私は何ヶ月も読んでいて、今まで追加するのに役立つものは何もありませんでした。ただ、一般的に「すべての助けに感謝します」と言いたいだけです。)

于 2012-10-21T18:51:04.877 に答える
1

私の推測では、collocations()呼び出しから返されるのは文字列ではなく、シリアル化する必要があるということです。代わりにこれを試してください:

import cherrypy
import nltk
from nltk.book import text4
import simplejson

class BiGrams:
    def index(self):
        c = text4.collocations(num=20)
        return simplejson.dumps(c)
    index.exposed = True

cherrypy.quickstart(BiGrams())
于 2012-05-17T14:23:20.583 に答える
0

ソース コード (http://code.google.com/p/nltk/source/browse/trunk/nltk/) を見てください。

1) コロケーションがコンソールに戻ってくるのは、それが本来の目的だからです。

help(text4.collocations)

あなたに与える:

Help on method collocations in module nltk.text:

collocations(self, num=20, window_size=2) method of nltk.text.Text instance
    Print collocations derived from the text, ignoring stopwords.

    @seealso: L{find_collocations}
    @param num: The maximum number of collocations to print.
    @type num: C{int}
    @param window_size: The number of tokens spanned by a collocation (default=2)
    @type window_size: C{int}

text.py のソースを参照すると、コロケーションの方法が非常に単純であることがわかります。

2) nltk.book をインポートすると、各テキストが読み込まれます。book.py から必要なビットを取得して、最初の住所のみをロードするメソッドを作成することができます。

于 2012-05-17T21:54:58.563 に答える