4

うまく機能する次のコードがありますが、データをトリミングしてデータファイルに保存することはできません。

import nltk

tweets = [
    (['love', 'this', 'car']),
    (['this', 'view', 'amazing']),
    (['not', 'looking', 'forward', 'the', 'concert'])
    ]

def get_words_in_tweets(tweets):
    all_words = []
    for (words) in tweets:
      all_words.extend(words)
    return all_words

def get_word_features(wordlist):
    wordlist = nltk.FreqDist(wordlist)
    word_features = wordlist.keys()
    return word_features

output = open('wordFeatures.csv','w')

word_features = get_word_features(get_words_in_tweets(tweets))

print (word_features)
output.write(word_features)
#print (wordlist)
output.close()

それがすることは、単語がダブルかトリプルかどうかをチェックし、リストに単語を1つだけ追加することです。出力は次のようになります。

['this', 'amazing', 'car', 'concert', 'forward', 'looking', 'love', 'not', 'the', 'view']

ご覧のとおり、このデータをテキストファイルに保存しようとしましたが、

TypeError: expected a character buffer object

次の形式のテキストファイルで配列からのデータが必要です。

1:this
2:amazing
3:car 
4:concert
5:forward
...

したがって、増加する整数を持つすべての単語に対して1行。

この方法でデータを保存する方法を知っている人はいますか?

4

3 に答える 3

2

エラーの理由は、output.writeではなく文字列を受け入れることlistです。word_featuresですlist

リストをファイルに書き込むには、それを反復処理する必要があります。

for feature in word_features: 
    output.write("{0}\n".format(feature))

carconcertが同じ行にあるため、必要な形式がわかりません。私はそれがタイプミスであり、実際には別の行にそれらが必要であると想定しています。次に、これを実行してその出力を取得できます。

for nfeature in enumerate(word_features):
    output.write("{0}:{1}\n".format(nfeature[0] + 1, nfeature[1]))
于 2013-09-15T14:56:44.310 に答える
1

リスト オブジェクトをファイルに書き込もうとしていますが、文字列が必要です。ここで `enumerate を使用できます。

word_features = get_word_features(get_words_in_tweets(tweets))
with open('wordFeatures.csv', 'w') as output:
    for ind, item in enumerate(word_features, 1):
        output.write("{}:{}\n".format(ind, item))

またはcsvモジュールを使用:

import csv
word_features = get_word_features(get_words_in_tweets(tweets))
with open('wordFeatures.csv', 'w') as output:
    writer = csv.writer(output, delimiter=':')
    writer.writerows(enumerate(word_features, 1))

出力:

1:this
2:amazing
3:car
4:concert
5:forward
6:looking
7:love
8:not
9:the
10:view
于 2013-09-15T15:56:21.953 に答える
0

Python では、データを csv ファイルに保存しますが、かなりハックな方法で行います。

まず、データをテキスト ファイルに保存します。各行では、各「列要素」をカンマで区切ります。

次に、その行 (現在はテキスト ファイルの 1 行のみ) の処理が終わったら、新しい行に書き込み、次のデータ行に書き込みを開始します。必要に応じて繰り返します。

次に、すべてが完了したら、テキスト ファイルの名前を csv ファイルに変更します。

増加する整数を追加すると、増分カウンターを作成できます。私と同じようにすれば、カウンターをインクリメントし、値をテキスト ファイルに書き込み、コンマを書き込み、データを書き込み、新しい行に書き込み、繰り返すことができます。すべて完了したら、ファイルの名前を csv ファイルに変更することを忘れないでください。

私が言ったように、それを行うハック方法ですが、どちらでも構いません。私はより良い方法を聞くことにオープンです。

于 2013-09-15T14:55:18.760 に答える