Извлечение данных из очень переменных строк

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

"English   good   arabic   good   german   basic knowledges"
"good in english, a little bit german"
"english, german"
"english - very good, german - preferred"

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

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

У вас есть идеи, как создать такой функционал?

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

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] — этот процесс называется фаззификацией языковых переменных
  2. Найдите подходящие категории («хорошие», «плохие», «промежуточные», «нативные» и т. Д.) И функции принадлежности, чтобы разделить эти оценки на понятные лингвистические формы — этот процесс называется дефаззификация
  3. Примените все возможные правила (с точки зрения шага 2.), которые вы можете использовать для оценки знаний как 1,2,3,4,5
  4. Defuzzify (м.б. лучше сказать «агрегат») результат шага 3 в целое число 1,2,3,4,5 для английского и немецкого языков (отдельно)

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

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]