2012-03-20 41 views
-1

好的,所以我的應用程序會從我的網站內的數據庫中找到您鍵入的文本框中的單詞..它會找到「單詞」,如果有超過1個「單詞」它會通過每個挑選一個隨機的「回覆」Java php找到類似的詞

我該怎麼做,以便如果它找不到單詞「嘿」它會尋找類似的東西,如「他」等?

這裏是我的PHP:

<?php 
// Connect to database 
mysql_connect("server", "db username", "db password"); 
mysql_select_db("db405677000"); 

// If something is received 
if($_POST) 
{ 
    if($_POST['action'] == "ask") 
    { 
     // Filter it to prevent SQL injections 
     $text = mysql_real_escape_string($_POST['stringdata']); 

     // Search it on the database 
     $q = mysql_query("SELECT `reply` FROM `poka` WHERE `word` = '$text' ORDER BY RAND()"); 

     // Show result 
     if($r = mysql_fetch_assoc($q)) 
      echo $r['reply']; 
     else 
      echo "Cannot find a reply"; 
    } 
    elseif($_POST['action'] == "teach") 
    { 
     // Filter it to prevent SQL injections 
     $word = mysql_real_escape_string($_POST['word']); 
     $answer = mysql_real_escape_string($_POST['answer']); 

     // Insert it to the database 
     if(mysql_query("INSERT INTO `poka` VALUES(NULL, '$word', '$answer')")) 
      echo "ok"; 
     else 
      echo "fail"; 
    } 
} 
?> 

這裏是它實際上得到響應我的Java部分:

public void responseGet(String textRequest) 
{ 
    EditText textbox = (EditText)findViewById(R.id.chat); 
    textbox.setText(""); 

    TableLayout chatbox = (TableLayout)findViewById(R.id.chatbox); 
    if(canReply == false) 
    { 
     TableRow tr1 = new TableRow(this); 
     tr1.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)); 
     TextView textview = new TextView(this); 

     // Create a new HttpClient and Post Header 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost("http://monaiz.net/get.php"); 

     String responseStr = ""; 

     try { 
      // Add your data 
      List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
      nameValuePairs.add(new BasicNameValuePair("stringdata", textRequest)); 
      nameValuePairs.add(new BasicNameValuePair("action", "ask")); 
      httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

      // Execute HTTP Post Request 
      HttpResponse response = httpclient.execute(httppost); 
      HttpEntity entity = response.getEntity(); 

      responseStr = EntityUtils.toString(entity).replace("\\", ""); 

     } catch (Exception e) { 
      // TODO Auto-generated catch block 
     } 

     textview.setText(responseStr); 
     // textview.getTextColors(R.color.) 
     textview.setTextColor(Color.BLACK); 
     textview.setGravity(Gravity.LEFT); 

     tr1.addView(textview); 

     // Convert dp to px 
      int padding_in_dp = 7; 
      final float scale = getResources().getDisplayMetrics().density; 
      int padding_in_px = (int) (padding_in_dp * scale + 0.5f); 

      tr1.setPadding(padding_in_px, 0, padding_in_px, 0); 
     tr1.setBackgroundResource(R.drawable.pokaspeak); 

     tr1.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Intent startNewActivityOpen = new Intent(main.this, TeachmeDialog.class); 
        startActivityForResult(startNewActivityOpen, 0); 
       } 
       }); 

      chatbox.addView(tr1, new TableLayout.LayoutParams(
        LayoutParams.FILL_PARENT, 
        LayoutParams.WRAP_CONTENT)); 
      canReply = true; 


      new Handler().postDelayed(new Runnable() { 
       @Override 
       public void run() { 
       ScrollView s = (ScrollView) findViewById(R.id.SV); 
       s.fullScroll(View.FOCUS_DOWN); 
       } 
      },100); 
    } 
} 
+0

哪裏Java的一部分? – DarthVader 2012-03-20 05:43:23

+0

修好了:)請看看吧 – user1278696 2012-03-20 05:45:29

回答

1

您可以使用名爲metaphone PHP函數。

還有一個叫soundex的函數,它返回代表其聲音的單詞的數字代碼。聽起來相似的詞將具有相同的soundex代碼。你可以有一個包含單詞和他們的soundex代碼的表格,你可以用它來查找類似的聲音單詞。然後,您可以使用他們的levenshtein距離對它們進行排序

與soundex()metaphone類似,爲類似的探測詞創建相同的密鑰。它比soundex()更準確,因爲它知道英語發音的基本規則。 metaphone生成的密鑰長度可變。

在MySQL中,您可以使用SOUNDEX函數。你只需要從

...WHERE `word` = '$text'... 

查詢更改where子句來

...WHERE soundex(word) = soundex('$text')... 

,甚至更好,你可以使用SOUNDS LIKE運營商作爲

...WHERE word sounds like '$text'... 

希望這有助於

+0

我愛你!這工作完美!我不敢相信這其實很簡單。 – user1278696 2012-03-20 05:59:13