0

問題は次のとおりです。

通常は 20 ~ 50 語の要約が 1 つありますが、これを他の比較的類似した要約と比較したいと思います。概要が参照する一般的なカテゴリと地理的な場所は、既にわかっています。

たとえば、同じ地域の人々が家を建てることについて書いている場合、ガレージや裏庭のプールを建てるのではなく、実際に家を建てることについて言及しているというある程度の確信を持って、それらの要約をリストできるようにしたいと思います.

現在、データ セットは約 50,000 ドキュメントで、1 日あたり約 200 ドキュメントの増加率です。

優先される言語は、Python、PHP、C/C++、Haskell、または Erlang のいずれかで、仕事を遂行できるものであればどれでもかまいません。また、差し支えなければ、特定の言語を選んだ理由を教えていただきたいです。

4

4 に答える 4

4

Jaccard や Dice など、いくつかの文字列類似性測定を使用することもできますが、文字の重複を計算する代わりに、単語の重複を計算します。たとえば、Python を使用すると、次のように使用できます。

def word_overlap(a, b):
    return [x for x in a if x in b]


def jaccard(a, b, overlap_fn=word_overlap):
    """
    Jaccard coefficient (/\ represents intersection), given by :
        Jaccard(A, B) = (A /\ B) / (|a|) + (|b|) - (A /\ B)
    """
    c = overlap_fn(a, b)
    return float(len(c)) / (len(a) + len(b) - len(c))

jaccard("Selling a beautiful house in California".split(), "Buying a beautiful crip in California".split())
于 2009-07-19T05:31:38.593 に答える
4

Python にはセットのネイティブ サポートがあるため、JG コードを次のように変更できます。

def jaccard(a, b):
    """
    Jaccard coefficient (/\ represents intersection), given by :
        Jaccard(A, B) = (A /\ B) / (|a|) + (|b|) - (A /\ B)
    """
    c = a.intersection(b)
    return float(len(c)) / (len(a) + len(b) - len(c))

jaccard(set("Selling a beautiful house in California"), set("Buying a beautiful crip in California"))
于 2009-09-11T14:29:53.250 に答える
2

WEBSOM プロジェクトをご覧ください。

彼らの Web サイトは正確には今年更新されていませんが、解決されている問題は非常に似ています。10 年前のように、彼らはあなたと同じ量の (またはそれ以上の) データを処理していたので、今日では、ほとんど携帯電話でアルゴリズムを実行できるでしょう。

于 2009-03-22T19:37:51.423 に答える
1

選択する特定の言語は実際にはありません。意味の類似性を見つけようとしています。これは非常に広い領域です。この論文に興味があるかもしれません:

テキストの意味的類似性のコーパスベースおよび知識ベースの測定

于 2009-03-22T19:41:14.223 に答える