r语言 - 选择允许轻微拼写错误的特定字符串



我有很多德国街道名称。他们中的大多数都以单词结尾...strasse.我想用它的缩写替换strassestr允许轻微的拼写错误(1 或 2 个字符缺失或错误),例如straestrassee.

我尝试了很多东西,并查找了一些:

street_names <- c("GERBERSTRAE", "NEUE STRAASSE", "SCHLOSSSTASSE", "HAUPTSTRASSE", "WINZERGASSE")
> gsub("[STRASSE]{5,7}S?T?R?A?S?S?E?$" , "STR", street_names, perl = T)
[1] "GERBSTR"     "NEUE STR"    "SCHLOSTR"    "HAUPSTR"     "WINZERGASSE"
> gsub("S?T?R?A?S?S?E?$" , "STR", street_names, perl = T)
[1] "GERBERSTR"    "NEUE STRASTR" "SCHLOSSSTR"   "HAUPTSTR"    
[5] "WINZERGSTR"

但到目前为止,它们都有一些对和错,我不知道如何将它们结合起来。("Winzergasse"不应该匹配,因为它以Gasse结尾,翻译为小巷)

任何帮助将不胜感激。

编辑

更多示例

street_names <- c("GERBERSTRAE", "NEUE STRAASSE", "SCHLOSSSTASSE", "HAUPTSTRASSE", "LINDENSASSE",
"WINZERGASSE", "PARKSTRASE", "ALTE STTRASSE", "BACHSTRAS", "LANGE SRASS")

您可以使用

gsub("GASSE(*SKIP)(*FAIL)|ST*R?[ASE]+$", "STR", street_names, perl = T)

这会产生

[1] "GERBERSTR"   "NEUE STR"    "SCHLOSSSTR"  "HAUPTSTR"    "WINZERGASSE"


这里的模式是
GASSE(*SKIP)(*FAIL) # match "GASSE" and let it fail
|                   # or
ST*R?[ASE]+         # S, T (0 or more times), R (optional), any A, S or E
$                   # end of the string

观看有关 regex101.com 的演示

我不知道您会遇到多少不同类型的印刷错误。对于您给出的示例,这样的事情将起作用:

gsub("STR.*|STA.*","STR",street_names)
[1] "GERBERSTR"   "NEUE STR"    "SCHLOSSSTR"  "HAUPTSTR"   
[5] "WINZERGASSE"

在模式中的每个字符后附加一个问号使它们都是可选的,因此模式基本上会匹配所有内容。 完全列出常见的拼写错误并接受这样一个事实,即有些人会发现您没有想到的创造性拼写,这要容易得多。

有点蛮力,但我认为:

gsub("(STRAE$)|(STRAASSE$)|(STASSE$)|(STRASSE$)", "STR", street_names)
[1] "GERBERSTR"   "NEUE STR"    "SCHLOSSSTR"  "HAUPTSTR"    "WINZERGASSE"

相关内容

最新更新