3

私を混乱させている簡単な質問。NLTK をインストールしましたが、問題なく動作しています。ただし、コーパスのバイグラムを取得しようとしており、基本的にバイグラム(コーパス)を使用したい..しかし、「nltkインポートバイグラムから」とバイグラムが定義されていないと表示されます

トライグラムと同じ。何か不足していますか?また、コーパスからバイグラムを手動で取得するにはどうすればよいですか。

また、バイグラム、トライグラム、クワッドの周波数を計算しようとしていますが、これをどうやって行うのか正確にはわかりません。

適切にコーパスを最初と最後に"<s>"andでトークン化しました。"</s>"ここまでのプログラム:

 #!/usr/bin/env python
import re
import nltk
import nltk.corpus as corpus
import tokenize
from nltk.corpus import brown

def alter_list(row):
    if row[-1] == '.':
        row[-1] = '</s>'
    else:
        row.append('</s>')
    return ['<s>'] + row

news = corpus.brown.sents(categories = 'editorial')
print len(news),'\n'

x = len(news)
for row in news[:x]:
    print(alter_list(row))
4

1 に答える 1

6

これを virtualenv でテストしたところ、動作しました。

In [20]: from nltk import bigrams

In [21]: bigrams('This is a test')
Out[21]: 
[('T', 'h'),
 ('h', 'i'),
 ('i', 's'),
 ('s', ' '),
 (' ', 'i'),
 ('i', 's'),
 ('s', ' '),
 (' ', 'a'),
 ('a', ' '),
 (' ', 't'),
 ('t', 'e'),
 ('e', 's'),
 ('s', 't')]

それはあなたが得ている唯一のエラーですか?

ところで、2 番目の質問については、

from collections import Counter
In [44]: b = bigrams('This is a test')

In [45]: Counter(b)
Out[45]: Counter({('i', 's'): 2, ('s', ' '): 2, ('a', ' '): 1, (' ', 't'): 1, ('e', 's'): 1, ('h', 'i'): 1, ('t', 'e'): 1, ('T', 'h'): 1, (' ', 'i'): 1, (' ', 'a'): 1, ('s', 't'): 1})

単語の場合:

In [49]: b = bigrams("This is a test".split(' '))

In [50]: b
Out[50]: [('This', 'is'), ('is', 'a'), ('a', 'test')]

In [51]: Counter(b)
Out[51]: Counter({('is', 'a'): 1, ('a', 'test'): 1, ('This', 'is'): 1})

この単語による分割は明らかに非常に表面的なものですが、アプリケーションによってはそれで十分な場合があります。明らかに、はるかに洗練された nltk のトークン化を使用できます。

最終的な目標を達成するために、次のようなことができます。

In [56]: d = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum."

In [56]: from nltk import trigrams
In [57]: tri = trigrams(d.split(' '))

In [60]: counter = Counter(tri)

In [61]: import random

In [62]: random.sample(counter, 5)
Out[62]: 
[('Ipsum', 'has', 'been'),
 ('industry.', 'Lorem', 'Ipsum'),
 ('Ipsum', 'passages,', 'and'),
 ('was', 'popularised', 'in'),
 ('galley', 'of', 'type')]

出力が不必要に大きかったため、出力をトリミングしましたが、おわかりいただけたでしょうか。

于 2012-10-26T03:54:52.403 に答える