sas генерирует все возможные ошибки правописания

#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 ..