2016-02-29 7 views
1

Надеюсь, вы сможете помочь мне в создании алгоритма. Мне нужно, чтобы вытащить данные из строки, введенной человеком (кому-то, кому не важно, что я должен это сделать). В этой строке он задает языковые требования. Данные уже есть, поэтому, к сожалению, слишком поздно попросить пользователя ввести это правильно. Строки могут выглядеть так:Извлечение данных из очень разных строк

"English good arabic good german basic knowledges" 

"good in english, a little bit german" 

"english, german" 

"english - very good, german - preferred" 

сейчас я только хочу сосредоточиться на немецком конце английского здесь. Я хотел бы знать, что они требуются или нет, и, если возможно, насколько (возможно, по форме 1 - «немного знать» до 5 - «быть совершенным в ней»)

I подумал о том, что алгоритм разбивает строку на слова (это не проблема), а затем перебирает их, обнаруживая, что это слово означает немецкий или английский (возможно, некоторым регулярным выражением, например /(deu|ger)/Ui и /(eng)/Ui), а затем получение уровня требования (здесь идет сложная часть), которая должна стоять где-то в следующих или предыдущих словах (или ее вообще нет).

Есть ли у вас идеи о том, как создать такую ​​функциональность?

Он должен работать на PHP7, но речь идет об идее алгоритма здесь, а не о реализации (пока).

+3

Лучше, чтобы заставить последовательный ввод, чем пытаться расшифровать любые мыслимые комбинации. – AbraCadaver

+0

Слишком поздно. База данных уже заполнена. Он не должен быть идеальным. Я просто хочу, если возможно, обнаружение. –

ответ

1

Этот метод использует нечеткую теорию множеств и может работать только на 80%. Это не так уж плохо, потому что любой нечеткий алгоритм допускает выбросы в наборах данных.

Ваши примеры могут быть описаны как

LANG1 + separator + LANG2 + separator

где

LANG = NAME + adjective или adjective + NAME

separator = ,;. или даже может быть виртуальным.

Для анализа NAME и adjective вы должны использовать примерное сопоставление строк.

Мои наблюдения:

  1. LANG1 лучше, чем LANG2
  2. LANG может содержать прилагательное
  3. некоторые прилагательные могут нарушить наблюдение 1.(Я думаю, что это может быть проверен несколько «если» заявление)
  4. некоторых прилагательных могут быть использованы для оценки уровня знаний
  5. В случае, когда separator между LANG1 и LANG2 виртуален мы можем добавить ; сразу после того момента, когда NAME1 получить adjective1 или прямо до того момента, когда NAME2 найден

чтобы получить оценку уровня знаний, вы должны:

  1. Оценить top100 eng прилагательные вручную, используя значения от [0;1] - этот процесс называется fuzzification лингвистических переменных
  2. Найдите подходящие категории («хорошие», «плохие», «предварительные», «родные» и т. Д.) И членство функции, чтобы отличить эти оценки в понятные языковые формы - этот процесс называется defuzzification
  3. Применить все возможные правила (в терминах шага 2.), которые можно использовать для оценки знаний в 1,2,3,4,5
  4. Defuzzify (мб это лучше сказать " агрегат ") результат этапа 3 в целое число 1,2,3,4,5 для английского и немецкого языков (отдельно)

Если у вас есть дополнительная информация о пользователях, которые могут помочь на шаге 3 (так же, как я это сделал в наблюдении 1) - я думаю, вы должны найти еще несколько замечаний, потому что оценка с помощью помощников довольно субъективна. Например, если возраст ваших пользователей меньше 14 лет - нет возможности найти «продвинутого» динамика, я думаю, но если ваш сайт называется «немецкий для молодежи», он все равно может получить «5».

PS В случае, если вы получите какие-либо положительные результаты, это может быть хорошим материалом для академического издания!))

Смежные вопросы