如何使用 SOUNDEX 标记一个单词是否听起来像字符字段中的任何单词?
How to flag if a word sounds like any word within a character field, using SOUNDEX?
我有一个很长的字符变量(最多 12,000 个字符),我想在该变量中找到一个听起来像某个词的字符串。
如果字符串在变量中,我还想创建一个等于 1 的变量。比方说,为了争论起见,我要查找的词是 "Mary"(不区分大小写)。以下是名为 "question":
的数据集中名为 "string" 的变量中的四个示例字符串
- 玛丽有一只小羊羔,它的羊毛像雪一样白
- Jack be nimble Jack be quick Jack jump over the candlestick
- 我觉得你我应该结婚
- 其实我不想结婚
字符串 1 和 3 的标志变量应该 = 1(因为 Mary 和 marry)。
很遗憾,我认为我无法使用此代码:
DATA answer;
SET question;
IF FINDW(string, SOUNDEX("Mary")) ne 0 THEN flag=1;
ELSE flag=0;
RUN;
它不起作用,因为 SAS 正在尝试在字符串(而不是实际字符串 "Mary")中查找 "Mary" 的 soundex 代码。关于如何解决这个问题有什么想法吗?
这是一种方法。遍历每个单词并计算该单词的 soundex 。如果 soundex 匹配,它会跳出循环,以提高效率。
data test_set;
infile datalines dsd;
length string 0;
input string;
datalines;
Mary had a little lamb its fleece was white as snow
Jack be nimble Jack be quick Jack jump over the candlestick
I think you and I should marry each other
I actually do not want to get married
;
run;
data test_set1(keep=string flag);
set test_set;
length i_word 0;
flag = 0;
mary_soundex = soundex("mary");
word_count = countw(string);
i = 1;
do while (i le word_count and flag ne 1);
i_word = scan(string, i);
i_word_soundex = soundex(i_word);
if mary_soundex eq i_word_soundex then flag = 1;
i = i + 1;
end;
run;
更多关于将句子分解成单词的信息:
http://blogs.sas.com/content/iml/2016/07/11/break-sentence-into-words-sas.html
我有一个很长的字符变量(最多 12,000 个字符),我想在该变量中找到一个听起来像某个词的字符串。
如果字符串在变量中,我还想创建一个等于 1 的变量。比方说,为了争论起见,我要查找的词是 "Mary"(不区分大小写)。以下是名为 "question":
- 玛丽有一只小羊羔,它的羊毛像雪一样白
- Jack be nimble Jack be quick Jack jump over the candlestick
- 我觉得你我应该结婚
- 其实我不想结婚
字符串 1 和 3 的标志变量应该 = 1(因为 Mary 和 marry)。
很遗憾,我认为我无法使用此代码:
DATA answer;
SET question;
IF FINDW(string, SOUNDEX("Mary")) ne 0 THEN flag=1;
ELSE flag=0;
RUN;
它不起作用,因为 SAS 正在尝试在字符串(而不是实际字符串 "Mary")中查找 "Mary" 的 soundex 代码。关于如何解决这个问题有什么想法吗?
这是一种方法。遍历每个单词并计算该单词的 soundex 。如果 soundex 匹配,它会跳出循环,以提高效率。
data test_set;
infile datalines dsd;
length string 0;
input string;
datalines;
Mary had a little lamb its fleece was white as snow
Jack be nimble Jack be quick Jack jump over the candlestick
I think you and I should marry each other
I actually do not want to get married
;
run;
data test_set1(keep=string flag);
set test_set;
length i_word 0;
flag = 0;
mary_soundex = soundex("mary");
word_count = countw(string);
i = 1;
do while (i le word_count and flag ne 1);
i_word = scan(string, i);
i_word_soundex = soundex(i_word);
if mary_soundex eq i_word_soundex then flag = 1;
i = i + 1;
end;
run;
更多关于将句子分解成单词的信息: http://blogs.sas.com/content/iml/2016/07/11/break-sentence-into-words-sas.html