从非常可变的字符串

时间:2016-02-29 18:10:01

标签: php algorithm detection extraction data-extraction

我希望你能帮助我创建一个算法。 我需要的是从人类输入的字符串中提取数据(某人并不真正关心我必须这样做)。在这个字符串中他提出了语言要求。数据已经存在,所以要求用户正确输入数据已经太晚了。字符串可能如下所示:

"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上运行,但它是关于这里的算法的想法,而不是实现(还)。

1 个答案:

答案 0 :(得分:1)

此方法使用模糊集理论,可能仅适用于80%。它并没有那么糟糕,因为任何模糊算法都会假设数据集中存在异常值。

您的示例可以描述为

LANG1 + separator + LANG2 + separator

其中

LANG = NAME + adjectiveadjective + NAME

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

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

我的观察:

  1. LANG1优于LANG2
  2. LANG可能包含形容词
  3. 一些形容词可能会破坏观察1.(我认为可以通过几个" if"语句来检查)
  4. 一些形容词可以用来估计知识水平
  5. 如果separatorLANG1之间的LANG2为虚拟,我们可以在;获取NAME1之后立即添加adjective1或就在NAME2被发现之前
  6. 要估算知识水平,您必须:

    1. 使用[0;1]中的值手动估算top100 eng形容词 - 此过程称为语言变量的模糊化
    2. 找到合适的类别("好","坏"," pre-intermediate"," native"等)和成员函数将这些估计区分为可理解的语言形式 - 这个过程称为defuzzification
    3. 应用所有可能的规则(根据步骤2),您可以使用这些规则来估算知识1,2,3,4,5
    4. 去模糊化(最好说"聚合")步骤3的结果为英语和德语的整数1,2,3,4,5(单独)
    5. 如果你有一些关于可能对第3步有帮助的用户的其他信息(正如我在观察1中所做的那样) - 我认为你应该找到更多的观察结果,因为使用adjactives的估计是相当主观的。例如,如果您的用户年龄低于14岁,则无法找到" advanced"我认为,但如果您的网站被称为"德语为年轻人" - 他仍然可以得到" 5"。

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