web-dev-qa-db-ja.com

ルックアップ辞書からエラーの提案を生成する

編集:テキストフィールドのスペースをより適切に処理するために、ファイルがtsvに変更されました

次の形式の2つのcsvファイルがあります。

ファイル1:availableText.csv(非常に大きくなる可能性があります)

"id1"、 "text1-1"
"id1"、 "text1-2"
"id1"、 "text1-3"
"id1"、 "text1-4"
"id2"、 "text2-1"
"id2"、 "text2-2"
"id2"、 "text2-3"
"id2"、 "text2-4"
.。

ファイル2:wrongText.csv

"id1"、 "texta"
"id2"、 "textb"
"id3"、 "textc"
"id4"、 "texted"
.。

wrongText.csvのすべての行について、同じIDの使用可能なテキストエントリをフィルタリングし、tre-agrep(パターンのエラーを許可し、-Bを使用するgrepのような関数)を使用して使用可能な最適なオプションを提案します。最適な一致を返します)

たとえば、id1の場合:

tre-agrep -B'texta '(text1-1:4から)| tr "\ n" "$"
( 'text1-2 $ text1-4'のようなものを生成します)

目的の出力ファイルは次のようになります。

"id1"、 "texta"、 "text1-2 $ text1-4"
"id2"、 "textb"、 "text2-1 $ text2-3 $ text2-4"

注意:

  1. CSVは任意の形式に変換できますが、テキストにはスペースを含めることができます(特殊文字は含まない)
  2. IDには、特殊文字とutf-8の両方が含まれています
  3. 速度は関係ありません(少なくとも今のところ)
3
jimkont

入力ファイルをtsvに変更し、次のソリューションを使用しました(最初の回答から着想を得た)

echo "" > wrong_variables.tmp  
while read line  
do  
    var_template=`echo $line | cut -f2`  
    var_parameter=`echo $line | cut -f3`  

    #TODO order by template and cache grep output  
    grep "${var_template}" templ2.tmp  | cut -f2 > tmpfile  
    var_suggest=`tre-agrep -B "$var_parameter" tmpfile | tr "\n" "$"`  

    echo $line \\t $var_suggest >> wrong_variables.tmp
done < $OUTPUT_RAW
0
jimkont

結果のワンライナーとして:

for pattern in $(awk '{print $3}' wrong.csv) ; do tre-agrep -B $pattern available.csv | tr "\n" "$"; echo ; done  
"id1" , "text1-1"$"id1" , "text1-2"$"id1" , "text1-3"$"id1" , "text1-4"$"id2" , "text2-1"$"id2" , "text2-2"$"id2" , "text2-3"$"id2" , "text2-4"$
"id1" , "text1-1"$"id1" , "text1-2"$"id1" , "text1-3"$"id1" , "text1-4"$"id2" , "text2-1"$"id2" , "text2-2"$"id2" , "text2-3"$"id2" , "text2-4"$
"id1" , "text1-1"$"id1" , "text1-2"$"id1" , "text1-3"$"id1" , "text1-4"$"id2" , "text2-1"$"id2" , "text2-2"$"id2" , "text2-3"$"id2" , "text2-4"$
"id1" , "text1-1"$"id1" , "text1-2"$"id1" , "text1-3"$"id1" , "text1-4"$"id2" , "text2-1"$"id2" , "text2-2"$"id2" , "text2-3"$"id2" , "text2-4"$

読みやすく:

for pattern in $(awk '{print $3}' wrong.csv) 
do
  tre-agrep -B $pattern available.csv | tr "\n" "$"
  echo
done  

そんな感じ?

1
user unknown