2016-02-29 22 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如果你會得到任何積極的結果,可能是學術刊物的好材料!))