Я надеюсь, что вы можете помочь мне в создании алгоритма.
Что мне нужно, так это извлечь данные из строки, введенной человеком (человеком, которому действительно все равно, что я должен это делать). В этой строке он ставит требования к языку. Данные уже есть, поэтому, к сожалению, уже слишком поздно, чтобы попросить пользователя ввести это правильно. Строки могут выглядеть так:
"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, кстати, но здесь речь идет об идее алгоритма, а не о его реализации (пока).
Этот метод использует теорию нечетких множеств и может работать только на 80%. Это не так уж и плохо, потому что любой нечеткий алгоритм допускает выбросы в наборах данных.
Ваши примеры можно описать как
LANG1
+ separator
+ LANG2
+ separator
где
LANG
знак равно NAME
+ adjective
или же adjective
+ NAME
separator
знак равно ,
;
.
или даже может быть виртуальным.
Разобрать NAME
а также adjective
Вы должны использовать приблизительное совпадение строк.
Мои наблюдения:
LANG1
лучше, чем LANG2
LANG
может содержать прилагательноеseparator
между LANG1
а также LANG2
виртуально мы можем добавить ;
сразу после того момента, когда NAME1
получить adjective1
или прямо до того момента, когда NAME2
найденЧтобы получить оценку уровня знаний, вам необходимо:
[0;1]
— этот процесс называется фаззификацией языковых переменных1,2,3,4,5
1,2,3,4,5
для английского и немецкого языков (отдельно)В случае, если у вас есть дополнительная информация о пользователях, которая может помочь на шаге 3 (так же, как я это делал в наблюдении 1) — я думаю, вам следует найти еще несколько наблюдений, потому что оценка с прилагательными является довольно субъективной. Например, если возраст ваших пользователей меньше 14 лет, я думаю, что нет возможности найти «продвинутого» докладчика, но если ваш сайт называется «Немецкий для молодежи», он все равно может получить «5».
PS В случае, если вы получите какие-либо положительные результаты, это может быть хорошим материалом для академической публикации!))
Других решений пока нет …