2012-03-20 46 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