簡體   English   中英

如何在給定文本文件中以不同的語言搜索字符串

[英]How to search for string in given text file in different language

我想為音樂系統應用程序開發模式搜索算法,該系統搜索給定關鍵字並播放其文本文件包含給定關鍵字的音樂。 現在有許多模式搜索算法可以有效地做到這一點(例如:KMP,哈希(可能會出錯)等)。 但是我的主要問題是整個數據庫使用的語言不是英語(具體來說是“印地語”)。 現在,用戶以“印地語”語言輸入給定的關鍵字,我想在還包含“印地語”語言的數據庫中進行搜索。 我主要關心的是如何有效地在該數據庫中搜索?

我認為我們無法針對非英語語言執行KMP算法,因為我們使用的ascii字符僅包含英文字母和其他數字字母,但不包含其他語言的字母。 因此,請告訴我如何解決無法解決的問題,或者告訴我在錯誤的方向思考?

KMP算法不基於字母,它使用給定模式和文本中的字符。 此外,在Java之類的語言中,字符串使用UTF-8編碼,因此您可以使用任何喜歡的語言,並且算法可以正常工作,在其他語言中,您需要明確選擇編碼。 在這里,我給出了在Ideone上使用非ascii字符集使用KMP的示例的鏈接。 KMP算法

    /* package whatever; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

class Ideone {
    int[] f;
    public void dfa(String pattern) {
        int m = pattern.length();
        f = new int[m+1];
        f[0] = 0;
        f[1] = 0;
        for(int i=2; i<=m; i++) {
            int j = f[i-1];
            for(;;) {
                if(pattern.charAt(j) == pattern.charAt(i-1)) {
                    f[i] = j +1;
                    break;
                }
                if(j==0) {
                    f[i] = 0;
                    break;
                }
                j = f[j];
            }
        }
    }

    public int match(String text, String pattern) {
        dfa(pattern);
        int n = text.length();
        int m = pattern.length();
        int i = 0;
        int j = 0;
        for(;;) {
            if(i == n) break;
            if(text.charAt(i) == pattern.charAt(j)) {
                j++;
                i++;
                if(j == m) return i;
            }
            else if(j > 0) j =f[j];
            else i++;
        }
        return -1;
    }

    public static void main(String[] args) {
        Ideone kmp = new Ideone();
        String text = "AĄĘĆABA";
        String pattern = "ĄĘĆ";
        System.out.println(kmp.match(text, pattern));
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM