0

私は2つのテーブルを持っています。

1 つのテーブルには 2 つの列があり、1 つは ID で、もう 1 つは約 300 ~ 500 語の長さのドキュメントの要約です。約500行あります。

もう 1 つのテーブルには、列が 1 つしかなく、行が 18000 を超えています。その列の各セルには、NGF、EPO、TPO などの個別の頭字語が含まれています。

私は、表 1 の各要約をスキャンし、表 2 にも存在する 1 つ以上の頭字語を特定するスクリプトに興味があります。

最後に、プログラムは別のテーブルを作成します。最初の列には、テーブル 1 の最初の列の内容 (ID) と、その ID に関連付けられたドキュメントで見つかった頭字語が含まれます。

Python、Perl、またはその他のスクリプト言語の専門知識を持っている人が助けてくれますか?

4

3 に答える 3

1

アブストラクトに頭字語が表示されている 2 つのテーブルを結合しようとしているように思えます。つまり (疑似 SQL):

SELECT acronym.id, document.id
FROM acronym, document
WHERE acronym.value IN explode(documents.abstract)

目的のセマンティクスがあれば、最も単純なアプローチを使用できます。

acronyms = ['ABC', ...]
documents = [(0, "Document zeros discusses the value of ABC in the context of..."), ...]

joins = []

for id, abstract in documents:
    for word in abstract.split():
        try:
            index = acronyms.index(word)
            joins.append((id, index))
        except ValueError:
            pass # word not an acronym

これは単純な実装です。ただし、acronyms.index は線形検索を実行するため (最大の配列も同様)、実行時間は n 乗になります。最初に頭字語のハッシュ インデックスを作成することで、アルゴリズムを改善できます。

acronyms = ['ABC', ...]
documents = [(0, "Document zeros discusses the value of ABC in the context of..."), ...]

index = dict((acronym, idx) for idx, acronym in enumberate(acronyms))    
joins = []

for id, abstract in documents:
    for word in abstract.split():
        try
            joins.append((id, index[word]))
        except KeyError:
            pass # word not an acronym

もちろん、実際のデータベースの使用を検討することもできます。そうすれば、結合を手動で実装する必要がなくなります。

于 2009-01-19T17:59:28.643 に答える
0

テーブルへのアクセス方法が異なるため (例: acronym.[id])、Access では機能しませんでした。

于 2009-01-19T19:45:04.500 に答える
0

迅速な対応ありがとうございました。疑似 SQL ソリューションは MYSQL などのためのものだと思いますが、Microsoft ACCESS では機能しませんでした。

2 番目と 3 番目は Python 用だと思います。頭字語とドキュメントを入力ファイルとしてフィードできますか? ばぶる

于 2009-01-19T19:22:47.463 に答える