有谁知道如何生成可能的拼写错误?
示例:失业 - uemployment - onemploymnet -- 等等。
如果您只想生成可能的拼写错误列表,您可以尝试使用类似这样的工具。否则,在 SAS 中,您可能可以使用COMPGED之类的函数来计算某人输入的字符串与您希望他们输入的字符串之间的相似度。如果按照您的标准,两者“足够接近”,请将其文本替换为您想要的文本。
这是一个计算“失业”和各种可能的拼写错误之间的广义编辑距离的示例。
data misspell;
input misspell $16.;
length misspell string $16.;
retain string "unemployment";
GED=compged(misspell, string,'iL');
datalines;
nemployment
uemployment
unmployment
uneployment
unemloyment
unempoyment
unemplyment
unemploment
unemployent
unemploymnt
unemploymet
unemploymen
unemploymenyt
unemploymenty
unemploymenht
unemploymenth
unemploymengt
unemploymentg
unemploymenft
unemploymentf
blahblah
;
proc print data=misspell label;
label GED='Generalized Edit Distance';
var misspell string GED;
run;
本质上,您正在尝试根据一些经验法则开发一个文本字符串列表,例如单词中缺少一个字母,一个字母放错位置,一个字母输入错误等。问题是在编写代码之前,必须明确定义这些规则,使用 SAS 或任何其他语言(这是 Chris 所指的)。如果您的要求减少到这种一个字母错误的情况,那么这可能是可以管理的;否则,评论者是正确的,您可以轻松创建大量不正确的拼写列表(毕竟,除了“失业”之外的所有组合都构成该词的拼写错误)。
话虽如此,SAS 中有很多方法可以完成这种文本操作(rx 函数、其他文本字符串函数的某种组合、宏);但是,可能有更好的方法来实现这一点。我建议使用外部 Perl 进程来生成可以读入 SAS 的文本文件,但其他程序员可能有更好的选择。
如果您正在寻找通用拼写检查器,SAS 确实有proc spell
.
需要进行一些调整才能使其适合您的情况;它很旧而且很笨重。在这种情况下它不能很好地工作,但是如果您尝试使用其他字典可能会有更好的结果?谷歌搜索将显示其他示例。
filename name temp lrecl=256;
options caps;
data _null_;
file name;
informat name $256.;
input name &;
put name;
cards;
uemployment
onemploymnet
;
proc spell in=name
dictionary=SASHELP.BASE.NAMES
suggest;
run;
options nocaps;