Come collegare automaticamente le lettere alle parole? [chiuso]

1

Vorrei collegare lettere a parole significative? Per es.

ingresso:

T E ST IN G WE B A P P LIC AT IO N S 

uscita:

TESTING WEB APPLICATIONS
  • che tipo di attività è questa? Un'attività in PNL o solo un'operazione di stringa? Quali tipi di attività NLP sono coinvolte?

  • Esistono programmi software che posso utilizzare per svolgere il lavoro?

  • Quali sono alcune librerie di programmazione che posso chiamare per fare il lavoro?

nota che: il mio testo originale non mostrato qui è un misto di lettere e parole separate dallo spazio e ci sono programmi software o librerie di programmazione che possono scoprire e sfruttare le parole esistenti?

    
posta Tim 15.02.2015 - 14:01
fonte

4 risposte

23

Hai sicuramente bisogno della PNL. Ad esempio:

EX P ER T S E XC H A NG E

può significare

EXPERT SEX CHANGE

o

EXPERTS EXCHANGE

in base al contesto.

    
risposta data 15.02.2015 - 14:14
fonte
11

Questo problema si chiama segmentazione delle parole o segmentazione del testo ed è stato ampiamente studiato .

Nota che in lingue come cinese, giapponese e coreano, tutto il testo in una frase appare normalmente senza spazi bianchi. La segmentazione delle parole è quindi un prerequisito per l'interpretazione della macchina del testo CJK.

    
risposta data 15.02.2015 - 19:40
fonte
5

In realtà questo non è un problema di intelligenza artificiale, questa è pura questione di programmazione risolta dalla programmazione dinamica.

Se vuoi semplicemente collegare i token in un elenco di parole correttamente digitate, procedi come segue (programmazione dinamica in stile top down):

public class Connector {

    public static void main(String[] args) {

        List<String> tokens = new ArrayList<String>(); // input
        Connector connector = new Connector();

        @SuppressWarnings("unused")
        List<String> ret = connector.connect(tokens);
    }

    Map<Integer, List<String>> cache;
    List<String> tokens;

    public List<String> connect(List<String> tokens) {
        this.cache = new HashMap<Integer, List<String>>();
        this.tokens = tokens;
        List<String> ret = connect(tokens, 0);
        return ret;
    }


    List<String> connect(List<String> tokens, int start) {
        if (cache.containsKey(start)) {
            return cache.get(start);
        } else {
            List<String> results = new ArrayList<String>();
            connectHelper(tokens, start, results);
            cache.put(start, results);
            return results;
        }
    }


    void connectHelper(List<String> tokens, int start, List<String> results) {
        int n = tokens.size();
        for(int i = start + 1; i < n; i++) {
            String part = concat(tokens, start, i);
            if (dictContains(part)) {
                List<String> restParts = connect(tokens, i);
                for(String oneRestPart : restParts) {
                    results.add(part + " " + oneRestPart);
                }
            }
        }
    }

    static private String concat(List<String> tokens, int low, int hi) {
        StringBuilder sb = new StringBuilder();
        for(int i = low; i < hi; i++) {
            sb.append(tokens.get(i));
        }
        return sb.toString();
    }
}
    
risposta data 15.02.2015 - 15:04
fonte
2

Il problema è chiamato 'modellazione del linguaggio'

È banale connettere lettere in alcune parole prendendo qualsiasi dizionario (elenco di parole valide) e trovando un modo adatto. Tuttavia, in pratica, il problema principale in questo compito è usuall trovare le parole migliori che si adattano a quelle lettere. Fortunatamente, questo è un problema che anche gli altri hanno - si verifica, ad esempio, nel riconoscimento vocale e quindi è piuttosto ben studiato e ha risorse e vari modi per cercare di risolverlo. In questo campo, questo problema viene generalmente chiamato "language modeling" .

Metodi statistici

L'approccio standard al momento per questo problema è di valutare statisticamente la probabilità di ogni subfragment sulla base di un gran numero di esempi di come la lingua appare nel mondo reale. Se vediamo spesso frammenti come "... al terapeuta" e raramente vedono frammenti come "... allo stupratore", allora possiamo assumere che quelle lettere dovrebbero essere unite.

Una buona descrizione del libro di testo classico è disponibile in Speech and Language Processing di Dan Jurafsky e Jim Martin (capitolo 6 nella prima edizione, capitolo 4 nella 2a edizione) e Fondamenti di Elaborazione statistica del linguaggio naturale di Chris Manning e Hinrich Schütze ( Capitolo 6).

Una libreria usata spesso per fare il modeling linguistico è SRILM - link e credo che progetti come come python NLTK ( link ) hanno anche strumenti per questo. In ogni caso, il particolare modello (pesi delle combinazioni di parole) è diverso per ogni lingua e dominio, quindi potrebbe essere qualcosa che devi adattarti.

    
risposta data 16.02.2015 - 13:06
fonte

Leggi altre domande sui tag