2012-03-20 7 views
-1

私のアプリはあなたのウェブサイト内のデータベースからテキストボックスにあなたが入力した単語を見つけるでしょう。そして、1つ以上の "単語"があれば "単語"を見つけるでしょうそれぞれを通過してランダムな "返信"を選ぶJavaのphp類似の単語を見つける

"hey"という単語が見つからない場合は、 "he"などの類似のものを探すようにするにはどうすればよいですか?

ここに私の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

どこに役立ちますsのJavaの部分ですか? – DarthVader

+0

固定:それを見てください – user1278696

答えて

1

あなたはmetaphoneと呼ばれるPHPの関数を使用することができます。

soundexという機能もあり、そのサウンドを表す単語の数値コードを返します。同じように聞こえる言葉は、同じsoundexコードを持ちます。同じような発音の言葉を調べるために使用できる単語とそのsoundexコードの表を持つことができます。あなたはそれをlevenshtein距離で並べ替えることができます

soundex()と同様に、metaphoneは同様の発音の言葉に同じキーを作成します。それは英語の発音の基本的な規則を知っているので、soundex()よりも正確です。メタフォン生成キーは可変長です。

MySQLでは、SOUNDEX機能を使用できます。あなたはちょうどあなたが

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

希望としてSOUNDS LIKE演算子を使用することができ、より良い

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

かに

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

からの問合せにあなたのwhere句を変更する必要があり、この

+0

私はあなたを愛しています!これは完璧です!私はそれが実際には簡単だとは信じられません。 – user1278696

関連する問題