1

私は、特定の単語の辞書を使用して、コーパス (コーパス) 内で発生する単語の数を取得しようとしている Python 初心者です。コーパスは、トークン化、正規化、見出し語化、語幹化された文字列型です。

dict = {}
dict ['words'] =  ('believe', 'tried', 'trust', 'experience')
counter=0
Result = []
for word in corpora:
    if word in dict.values():
        counter = i + 1
        else counter = 0

このコードは、dict.values() 行で構文エラーを生成します。どんな助けでも大歓迎です!

4

2 に答える 2

1
  1. しないでくださいdict = {}dict組み込み関数であり、それをシャドーイングしています。これは重要ではありません。後で必要になった場合に使用することはできません。
  2. 辞書はキー→値のマッピングです。まるで本物の辞書(単語→訳)。あなたがしたこと('believe', …)は、タプルであるvalue が'word'辞書のキーに対応していると言われています。次に、dict.values()これを使用して、辞書に格納されているすべての値のシーケンスを取得します。この場合、このシーケンスは正確に1つのアイテムで構成され、このアイテムはタプルです。あなたのif条件は決してTrue:wordは文字列であり、文字列dict.values()の単一のタプルで構成されるシーケンスです。
  3. なぜ辞書を使っているのかよくわかりません。あなたにとって重要な一連の単語を持っているようで、スキャンしてcorporaそれらの単語の出現回数を数えています。ここでのキーワードはsetです。辞書は必要ありませんset
  4. あなたが何を数えているのかは明らかではありません。iに追加するものは何counterですか? 1ずつインクリメントcounterするつもりなら、それはcounter = counter + 1またはである必要がありますcounter += 1
  5. なぜリセットするのcounterですか?

    counter = 0
    

    未知の単語を見つけたときにカウンターをリセットしたいとは思わない. 未知の単語でカウンターを変更するべきではないようです。

  6. ノート。変数名に大文字を使用しないようにしてください (これResult = []は悪いことです)。また、他の人が言及したように、 の後にコロンがありませんelse

それでは、すべてをまとめてみましょう。最初に行うことは、関心のある一連の単語を作成することです。

words = {'believe', 'tried', 'trust', 'experience'}

次に、コーパス内の単語を繰り返し処理して、どの単語がセットに含まれているかを確認できます。

for word in corpora:
    if word in words:
        # do something

コードが正確に何をすべきかは明らかではありませんが、セット内のすべての単語がコーパス内で何回見つかったかを知ることが目標である場合は、そのcounter中に 1 を追加するだけですif

セットの各単語がコーパスに何回出現するかを知りたい場合は、セット内のすべての単語に対して個別のカウンターを維持する必要があります (辞書が役立つ場合があります)。これは (特別な辞書) を使用して簡単に実現できcollections.Counterます。コーパスをフィルター処理して、興味のある単語だけを残す必要がありifilterます。

filtered_corpora = itertools.ifilter(lambda w: w in words, corpora)

—これはあなたのコーパスであり、見つからないすべての単語がwords削除されます。Counterすぐに合格できます。

このトリックは、最初のケース (合計数のみが必要な場合) にも役立ちます。このfiltered corpora の長さを返すだけです ( len(filtered_corpora))。

于 2013-06-05T07:15:19.857 に答える
0

複数の問題があります。corporaここの例では定義していません。dict組み込み型である を再定義しています。はelse正しくインデントされていません。dict.values()それぞれがタプルである iterable を返します。wordword が文字列の場合、その中にはありません。counter実際、何が重要なのかは明らかではありません。そしてそこで何Resultsをしているのですか?

あなたのコードはこの(疑似)コードに似ているかもしれません

d = {'words' : ('believe', 'tried', 'trust', 'experience')} #if that's really what you want
counter = {}
for word in corpora:
    for tup in d.values(): # each tup is a tuple
        if word in tup:
            x = counter[word] if word in counter else 0
            counter[word] = x+1

それを行うためのより短い方法があります。

ものを数えるというこのタスクは非常に一般的であるため、そのための特定のクラスがライブラリに存在します: collections.Counter.

于 2013-06-05T06:47:32.180 に答える