1

2 つの異なるファイルの列にある要素の加重スコアの結合と交差の両方を計算する必要があります。

入力ファイル 1 と入力ファイル 2 は同じです: 3 つのタブで区切られた列: 以下に例を示します。

入力1

abc with-1-rosette-n    8.1530
abc with-1-tyre-n   6.3597
abc with-1-weight-n 4.8932

入力2

deg about-article-n 3.2917
deg with-1-tyre-n   3.2773
deg about-bit-n 3.4527

ABC の列 2 の各値のスコア (列 3) の交点の合計を計算します。ここで、最小値 (値) & DEG と、それぞれのスコア (列 3) の結合の合計を考慮します。 ABC & DEG の Col2 の値。したがって、基本的に、望ましい出力は次のようになります。

この場合: 交差点 = 3.2773 (with-1-tyre-n) およびユニオン = 29.3546.

ここで、結合を交点で割ってスコアを取得します: スコア(交差)/スコア(結合) したがって、このサンプル データセットからの望ましい出力は次のようになります。

abc deg 0.1165

私はスクリプトに非常に熱心に取り組んでおり、いくつかの問題に直面しています。hereherehereからの提案は既に取り入れていますが、問題を解決できませんでした。

以下は、私が使用しているコードの関数のサンプルです。

def polyCalc(a_dict, b_dict):
    intersect = min(classA & classB)
    union = classA | classB

    score = sum(intersect) / sum(union)
    return score

def calculate_polyCalc(classB_infile, classA_infile, outfile):
    targetContext_polyCalc_A = defaultdict(dict)  # { target_lemma : {feat1 : weights, feat2: weights} ...}
    with open(classA_infile, "rb") as opened_infile_A:
        for line_A in opened_infile_A:
            target_class_A, featureA, weight = line_A.split()
            targetContext_polyCalc_A[target_class_A][featureA] = float(weight)

        targetContext_polyCalc_B = defaultdict(dict)
        with open(classB_infile, "rb") as opened_infile_B:
            for line_B in opened_infile_B:
                target_class_B, featureB, weight = line_B.split()
                targetContext_polyCalc_B[target_class_B][featureB] = float(weight)
                classA = set(targetContext_polyCalc_A[featureA])
                classB = set(targetContext_polyCalc_B[featureB])


            with open(outfile, "wb") as output_file:
                poly = polyCalc(targetContext_polyCalc_A[target_class_A], targetContext_polyCalc_B[target_class_B], score)
                outstring = "\t".join([classA, classB, str(poly)])
                output_file.write(outstring + "\n")

ドキュメントとさまざまな Web サイトのすべての指示に従いましたが、上記のコードでまだエラーが発生しています。function の定義でエラーが発生unionするだけでなく、辞書自体の定義方法にも問題があるようです。この問題を解決して目的の結果に到達する方法について、誰かが「経験」の洞察を提供できますか?

前もって感謝します。

PS ところで、これは python2.* を念頭に置いて書かれました。

4

1 に答える 1