2017-07-25 24 views
-4

我想實現,其中,如果用戶輸入關鍵字,在單複數,正則表達式應該返回true搜索真,如果這個詞是單數還是複數的Java

例如「我想要的結果通過無人機「或」我想通過無人機「。

@Test 
    public void testProductSearchRegexp() { 
     String regexp = "(?i).*?\\b%s\\b.*?"; 

     String query = "I want the drone with FLIR Duo"; 

     String data1 = "drone"; 
     String data2 = "FLIR Duo"; 
     String data3 = "FLIR"; 
     String data4 = "drones"; 

     boolean isData1 = query.matches(String.format(regexp, data1)); 
     boolean isData2 = query.matches(String.format(regexp, data2)); 
     boolean isData3 = query.matches(String.format(regexp, data3)); 
     boolean isData4 = query.matches(String.format(regexp, data4)); 

     assertTrue(isData1); 
     assertTrue(isData2); 
     assertTrue(isData3); 
     assertTrue(isData4);//Test fails here (obviously) 
    } 

您對這個問題的寶貴時間非常感謝。

+7

怎麼樣「刀」和「刀」? '孩子'和'孩子'? '葉子'和'葉子'? '男人'和'男人'? – Michael

+1

所以你想知道其中一個單詞是否以''s'''結尾?這是一個複數的萬無一失的指標嗎? – f1sh

+0

要加入@Michael的名單,駝鹿?它會是肥胖還是mooses?也是鹿? – CraigR8806

回答

1

英語是一種有許多例外的語言。檢查一個單詞是否以's'結尾不足以確定它是否是複數。

解決此問題的最佳方法是不解決此問題。這是以前完成的。利用這一點。一種解決方案是使用第三方API。例如,The OED have one

如果你讓他們對自己的API請求,例如:

/entries/en/mice 

你還是會回到包含的JSON響應:

"crossReferenceMarkers": [ 
    "plural form of mouse" 
], 

從那裏應該很容易解析。簡單地檢查「複數」這個詞的出現可能就足夠了。

他們甚至還有可以複製和粘貼的Java示例。


這種方法的優點是沒有編譯時間依賴性。缺點是你依靠能夠發出HTTP請求。另一個原因是你受限於他們施加的任何限制。 OED在他們的免費計劃中允許每月最多3k個請求和60個請求/分鐘,這對我來說似乎相當合理。

1

那麼這樣的事情是很難實現的,沒有外部來源。當然,許多單詞以's'結尾,但也有很多例外,比如「刀」和「刀」或「仙人掌」和「仙人掌」。爲此,你可以使用Map來排序。

public static String getPlural(String singular){ 
    String plural; 
    HashMap<String,String> irregularPlurals = new HashMap<>(); 
    irregularPlurals.put("cactus","cacti"); 
    irregularPlurals.put("knife","knives"); 
    irregularPlurals.put("man","men"); 
    /*add all your irregular ones*/ 
    plural = irregularPlurals.get(singular); 
    if (plural == null){ 
     return singular + "s"; 
    }else{ 
     return plural; 
    } 
} 

很簡單,不是很實用,但能夠完成當你只有幾句話的工作。

相關問題