0

2 つのファイルを何百万回も繰り返し処理し、ファイル全体で単語のペアが出現する回数を数えます。(Fisher's Exact Test スコアを計算するための 2 つの単語の分割表を作成するため)

私は現在使用しています

from itertools import izip
src=tuple(open('src.txt','r'))
tgt=tuple(open('tgt.txt','r'))
w1count=0
w2count=0
w1='someword'
w2='anotherword'
for x,y in izip(src,tgt):
    if w1 in x:
         w1count+=1
    if w2 in y:
         w2count+=1
    .....

これは悪くありませんが、2 つのファイルを反復処理するより高速な方法があるかどうかを知りたいです。

よろしくお願いします。

4

3 に答える 3

1

私はまだあなたが何をしようとしているのか正確にはわかりませんが、正しい方向を示すコード例をいくつか示します。

辞書またはインスタンスを使用して、collections.Counter出現するすべての単語とペアをファイルの 1 回のパスでカウントできます。その後、メモリ内データをクエリするだけです。

import collections
import itertools
import re

def find_words(line):
    for match in re.finditer("\w+", line):
        yield match.group().lower()

counts1 = collections.Counter()
counts2 = collections.Counter()
counts_pairs = collections.Counter()

with open("src.txt") as f1, open("tgt.txt") as f2:
    for line1, line2 in itertools.izip(f1, f2):
        words1 = list(find_words(line1))
        words2 = list(find_words(line2))
        counts1.update(words1)
        counts2.update(words2)
        counts_pairs.update(itertools.product(words1, words2))

print counts1["someword"]
print counts1["anotherword"]
print counts_pairs["someword", "anotherword"]
于 2013-10-17T11:03:24.527 に答える
0

すぐに使える考え方として、ファイルを Pandas データ フレームに変換しようとしましたか? つまり、既に入力から単語リストを作成しており (. や , などの読み取り記号を削除して)、input.split(' ') などを使用していると仮定します。その後、DataFrames を作成し、ワード カウントを実行してから、デカルト結合を作成できますか?

import pandas as pd
df_1 = pd.DataFrame(src, columns=['word_1'])
df_1['count_1'] = 1
df_1 = df_1.groupby(['word_1']).sum()
df_1 = df_1.reset_index()

df_2 = pd.DataFrame(trg, columns=['word_2'])
df_2['count_2'] = 1
df_2 = df_2.groupby(['word_2']).sum()
df_2 = df_2.reset_index()

df_1['link'] = 1
df_2['link'] = 1

result_df = pd.merge(left=df_1, right=df_2, left_on='link', right_on='link')
del result_df['link']

私はバスケット分析にこのようなものを使用していますが、非常にうまく機能します。

于 2013-10-17T10:18:40.680 に答える
0

一般に、データがメモリに収まるほど小さい場合、最善の策は次のとおりです。

  1. データをメモリに前処理する

  2. メモリ構造から繰り返す

ファイルが大きい場合は、圧縮されたデータなどのデータ構造に前処理し、ピクルなどの形式に保存して、別のファイルで読み込みおよび操作してから処理することができる場合があります。

于 2013-10-17T10:02:47.907 に答える