2016-02-29 35 views
1

我希望你能帮我创建一个算法。 我需要的是从人类输入的字符串中提取数据(某人并不在意我必须这样做)。在这个字符串中他提出了语言要求。数据已经存在,所以要求用户输入正确的信息已经太晚了。字符串可能看起来像这样:从非常可变的字符串中提取数据

"English good arabic good german basic knowledges" 

"good in english, a little bit german" 

"english, german" 

"english - very good, german - preferred" 

现在我只想关注德语结尾英语在这里。我想知道他们是否需要,以及如果可能的话,多少(可能是一个等级形式 - “知道一点点”到5--“完美无缺”)

I想到一种算法将字符串分解为单词(这不是问题),然后循环遍历它们,检测这个单词是指德语还是英语(可能通过一些正则表达式,如/(deu|ger)/Ui/(eng)/Ui),然后获得需求的级别棘手的部分),它应该放在下面或之前的词语中(或者根本不存在)。

对于如何创建这样的功能你有什么想法吗?

它应该运行在PHP7顺便说一句,但它是关于算法的想法在这里,而不是实现(还)。

+3

更好的给力一致的输入不是试图破译任何可以想象的组合。 – AbraCadaver

+0

可悲的是太迟了。数据库已经填满。它不一定非常完美。如果可能,我只是想检测。 –

回答

1

该方法使用模糊集合理论,可能只适用于80%。这并不坏,因为任何模糊算法都假设数据集中有异常值。

你的实施例可以被描述为

LANG1 + separator + LANG2 + separator

其中

LANG = NAME + adjectiveadjective或+ NAME

separator = ,;.甚至可能是虚拟的。

要解析NAMEadjective您必须使用近似字符串匹配。

我的意见:

  1. LANG1LANG2
  2. LANG可以更好地用一个形容词来
  3. 一些形容词可能打破观察1。(我想它可以通过几个检查“if”语句)
  4. 一些形容词可以用来估算知识
  5. 在案件的水平时separatorLANG2之间LANG1是虚拟的,我们可以在那一刻之后添加;NAME1得到adjective1或前一刻权当NAME2发现

获得知识水平的估计,你必须:

  1. 使用[0;1]的值来手工估计top100英语形容词 - 此过程称为语言变量的模糊化
  2. 查找适当的类别(“好”,“坏”,“前中间”,“本地”等)和成员资格功能那些估计区分成可以理解的语言形式 - 这个过程被称为defuzzification
  3. 应用所有可能的规则(在步骤2中的条款),您可以用它来估算知识1,2,3,4,5
  4. Defuzzify(MB这是更好地说“聚合“)将步骤3的结果转换为英文和德文的整数1,2,3,4,5(单独)

如果您有关于用户的其他信息可能对第3步有所帮助(就像我在观察1中所做的那样) - 我认为您应该找到更多的观察结果,因为使用adjactives进行估计相当主观。例如,如果您的用户年龄在14岁以下 - 我认为没有机会找到“高级”发言人,但是如果您的网站被称为“年轻人德语” - 他仍然可能会获得“5”。

PS如果你会得到任何积极的结果,可能是学术刊物的好材料!))