我希望你能帮助我创建一个算法。 我需要的是从人类输入的字符串中提取数据(某人并不真正关心我必须这样做)。在这个字符串中他提出了语言要求。数据已经存在,所以要求用户正确输入数据已经太晚了。字符串可能如下所示:
"English good arabic good german basic knowledges"
"good in english, a little bit german"
"english, german"
"english - very good, german - preferred"
现在我只想在这里专注于德语结束英语。我想知道他们是否需要,并且,如果可能的话,多少(可能通过等级形式1 - "知道一点点"到5 - "完美的它&#34)
我想到了一个算法将字符串拆分成单词(这不是问题),然后循环遍历它们,检测这个单词是否意味着德语或英语(可能是某些正则表达式,如/(deu|ger)/Ui
和/(eng)/Ui
)然后获得要求的级别(这里是棘手的部分),它应该位于以下或之前的单词中(或者它根本就不存在)。
您对如何创建此类功能有任何想法吗?
它应该在PHP7 btw上运行,但它是关于这里的算法的想法,而不是实现(还)。
答案 0 :(得分:1)
此方法使用模糊集理论,可能仅适用于80%。它并没有那么糟糕,因为任何模糊算法都会假设数据集中存在异常值。
您的示例可以描述为
LANG1
+ separator
+ LANG2
+ separator
其中
LANG
= NAME
+ adjective
或adjective
+ NAME
separator
= ,
;
.
甚至可能是虚拟的。
要解析NAME
和adjective
,您必须使用近似字符串匹配。
我的观察:
LANG1
优于LANG2
LANG
可能包含形容词separator
和LANG1
之间的LANG2
为虚拟,我们可以在;
获取NAME1
之后立即添加adjective1
或就在NAME2
被发现之前要估算知识水平,您必须:
[0;1]
中的值手动估算top100 eng形容词 - 此过程称为语言变量的模糊化1,2,3,4,5
1,2,3,4,5
(单独)如果你有一些关于可能对第3步有帮助的用户的其他信息(正如我在观察1中所做的那样) - 我认为你应该找到更多的观察结果,因为使用adjactives的估计是相当主观的。例如,如果您的用户年龄低于14岁,则无法找到" advanced"我认为,但如果您的网站被称为"德语为年轻人" - 他仍然可以得到" 5"。
PS如果你得到任何积极的结果,它可能是学术出版物的好材料!))