从查找字典中生成错误建议

从查找字典中生成错误建议

编辑:文件已更改为 tsv 以更好地处理文本字段中的空格

我有 2 个 csv 文件,格式如下:

文件 1:availableText.csv(可能很大)

“id1”、“text1-1”
、“id1”、“text1-2”、
“id1”、“text1-3”、
“id1”、“text1-4”
、“id2”、“text2-1”、
“id2”、“文本2-2”
“id2”,“文本2-3”
“id2”,“文本2-4”
...

文件 2:错误文本.csv

“id1”,“texta”,
“id2”,“textb”,
“id3”,“textc”,
“id4”,“textd”
...

对于 中的每一行wrongText.csv,我想过滤相同 id 的可用文本条目,并使用建议最佳可用选项tre-agrep(类似于 grep 的函数,允许模式中出现错误,并使用 -B 返回最佳匹配)

例如,对于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. 速度并不重要(至少目前如此)

答案1

结果如下:

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  

类似的事情?

答案2

我将输入文件更改为 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

相关内容