#text #sas #mining #misspelling
#текст #sas #интеллектуальный анализ #орфографические ошибки
Вопрос:
Кто-нибудь знает, как сгенерировать возможные орфографические ошибки?
Пример: безработица — uemployment — onemploymnet — и т.д.
Комментарии:
1. Каково определение орфографической ошибки? Является ли «занятость» разновидностью «безработицы»? Без определения набор может быть бесконечным.
2. Чувак. Серьезно, вы должны время от времени принимать случайные ответы. 0% — это ужасно.
3. Я ищу код, который мог бы помочь мне сгенерировать что-то, что поможет подавить клиента, который неправильно пишет имя работодателя :
4. Вам следует вернуться к заданным вами вопросам и принять ответы (я полагаю, что это галочка, которую вы нажимаете рядом с ответом).
Ответ №1:
Если вы просто хотите сгенерировать список возможных орфографических ошибок, вы можете попробовать инструмент, подобный этому. В противном случае в 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;
Комментарии:
1. Спасибо, Джон, я на самом деле искал все эти возможные значения в качестве выходных данных sas. Я должен был быть более ясным.. Итак, я ищу код sas, который выдал бы мне выходные данные: nemployment uemployment unemployment uneployment unemployment unemployment unemployment unemployment unemployment unemployment unemployment unemployment unemployment unemployment unemployment unemployment unemployment unemployyment unemploymentf .. p
2. Я не думаю, что вы действительно хотите генерировать все возможные ошибки в написании и затем сопоставлять то, что было предоставлено с этим списком, а скорее использовать COMPGED, как предлагается здесь, чтобы сопоставить то, что было предоставлено с ожидаемым списком, а затем сказать, что это совпадение, если расстояние между написаниями достаточно низкое.
Ответ №2:
По сути, вы пытаетесь составить список текстовых строк на основе некоторого эмпирического правила, например, в слове отсутствует одна буква, буква неуместна в неправильном месте, одна буква была напечатана с ошибкой и т.д. Проблема в том, что эти правила должны быть явно определены, прежде чем вы сможете писать код на SAS или любом другом языке (это то, что имел в виду Крис). Если ваше требование сводится к этому сценарию с одной неправильной буквой, то это может быть выполнимо; в противном случае, комментаторы правы, и вы можете легко создать огромные списки неправильных написаний (в конце концов, все комбинации, кроме «unemployment», представляют собой неправильное написание этого слова).
С учетом сказанного, в SAS есть много способов выполнить эту обработку текста (rx-функции, некоторая комбинация других текстовых функций, макросы); однако, вероятно, есть более эффективные способы выполнить это. Я бы предложил внешний процесс Perl для генерации текстового файла, который можно прочитать в SAS, но у других программистов могут быть лучшие альтернативы.
Ответ №3:
Если вы ищете общую проверку орфографии, у SAS есть proc spell
.
Потребуется некоторая настройка, чтобы заставить его работать в вашей ситуации; он очень старый и неуклюжий. В данном случае это работает плохо, но, возможно, вы получите лучшие результаты, если попробуете использовать другой словарь? Поиск в Google покажет другие примеры.
filename name temp lrecl=256;
options caps;
data _null_;
file name;
informat name $256.;
input name amp;;
put name;
cards;
uemployment
onemploymnet
;
proc spell in=name
dictionary=SASHELP.BASE.NAMES
suggest;
run;
options nocaps;
Комментарии:
1. Спасибо, Ричи, но я должен был выразиться более ясно.. Итак, я ищу код sas, который выдал бы мне выходные данные: nemployment uemployment unemployment uneployment unemployment unemployment unemployment unemployment unemployment unemployment unemployment unemployment unemployment unemployment unemployment unemployment unemployment unemploymentf ..