1

データベースの列を並べ替える必要があります。この列はカテゴリ構造です。列のデータは都市名ですが、すべての名前が各都市で同じというわけではありません。必要なことは、列 i には、同じ都市の値が 20 ~ 40 ある場合がありますが、書き方が異なります。それらを解釈して単一の値に変更できるスクリプトが必要です。

したがって、都市の列に次の 2 つの値があるとします:( england > london ) と ( westlondon ) ですが、ロンドンだけに変更する必要があります。既に存在する値を解釈して変更できるスクリプトはありますか?これを1つずつ行う難しい方法を知りたいのですが、これを完了することができる言語のスクリプトがあるかどうか疑問に思いました

4

2 に答える 2

2

私はこの種のデータのクリーンアップを何度も行ってきましたが、残念ながら、独自の修正を作成するよりも簡単なことは知りません。

私がお勧めできることの 1 つは、プロセスを繰り返し可能にすることです。(rulenum、pattern、new_value) のような置換テーブルを用意します。次に、テーブルの関連部分のコピーを作成して、スクリプト全体を再実行できるようにします。

次に、明白な一致から始めて (もっともらしく見えるものだけを見てください)、よりあいまいな一致に移ることができます。最終的には一致しないものが 50 個あり、手動でエントリにパッチを適用するだけで済みます。

最初の数回の試行でミスマッチを見つけることになるため、反復可能にすることが重要です。

したがって、次のようなものです(構文はテストされていません):

CREATE TABLE matches (rule_num int PRIMARY KEY, pattern text, new_value text)

CREATE TABLE cityfix AS 
SELECT id, city AS old_city, '' AS new_city, 0 AS match_num FROM locations;

UPDATE c SET c.new_city = m.new_value, c.match_num = m.rule_num 
FROM cityfix AS c JOIN matches m ON c.old_city LIKE m.pattern 
WHERE c.match_num = 0;

-- Review results, add new patterns to rule_num, repeat UPDATE
-- If you need to you can drop table cityfix and repeat it.
于 2012-09-13T17:37:41.257 に答える
1

単なるアイデア: 16K はそれほど多くありません。最初にPerlDBIを使用して(Perlを使用すると仮定します)、その都市の列を取得し、それをハッシュ(都市名をハッシュとして)に保存してから、ニーズに合った(パフォーマンスに関して)アルゴリズムを見つけてハッシュを反復処理しますキーとString::Diff一致する交差を見つけるために使用します(それについて読んでください、それは間違いなくあなたを助けることができます)そしてそれを値として保存します..次に、それを使用して、キー(古い値)と値を新しい値として使用してデータベースを更新できます更新します。

于 2012-09-13T17:31:18.177 に答える