Domanda

Sto usando il termine " Codifica lessicale " per la mia mancanza di uno migliore.

Una Parola è probabilmente l'unità fondamentale di comunicazione rispetto a una Lettera. Unicode tenta di assegnare un valore numerico a ciascuna lettera di tutti gli alfabeti conosciuti. Che cosa è una lettera in una lingua, è un glifo in un'altra. Unicode 5.1 assegna attualmente più di 100.000 valori a questi glifi. Delle circa 180.000 parole utilizzate nell'inglese moderno, si dice che con un vocabolario di circa 2.000 parole, dovresti essere in grado di conversare in termini generali. Una "codifica lessicale" codificherebbe ogni parola e non ogni lettera e le incapsulerebbe in una frase.

// An simplified example of a "Lexical Encoding"
String sentence = "How are you today?";
int[] sentence = { 93, 22, 14, 330, QUERY };

In questo esempio ogni token nella stringa è stato codificato come intero. Lo schema di codifica qui semplicemente assegnato un valore int basato sulla classifica statistica generalizzata dell'uso delle parole e assegnato una costante al punto interrogativo.

Alla fine, una parola ha sia l'ortografia che l'amplificatore; Significa però. Qualsiasi " codifica lessicale " preserverebbe il significato e l'intento della Frase nel suo insieme e non sarebbe specifico per la lingua. Una frase inglese verrebbe codificata in " ... elementi atomici di significato neutrali rispetto al linguaggio ... " che potrebbe quindi essere ricostituito in qualsiasi lingua con una forma sintattica strutturata e una struttura grammaticale.

Quali sono altri esempi di " codifica lessicale " tecniche?


Se fossi interessato alla provenienza delle statistiche sull'uso delle parole:
http://www.wordcount.org

È stato utile?

Soluzione

Esistono diversi problemi importanti con questa idea. Nella maggior parte delle lingue, il significato di una parola e la parola associata a un significato cambiano molto rapidamente.

Non appena avresti assegnato un numero a una parola, prima che il significato della parola cambierebbe. Ad esempio, la parola "gay" usato solo per indicare "felice" o "allegro", ma ora è usato principalmente per indicare omosessuale. Un altro esempio è il morfema "grazie" che originariamente proveniva dal tedesco "danke" che è solo una parola. Ancora un altro esempio è "Good arrivederci" che è una riduzione di "Dio ti benedica".

Un altro problema è che anche se si scatta un'istantanea di una parola in qualsiasi momento, il significato e l'uso della parola sarebbero in conflitto, anche all'interno della stessa provincia. Quando i dizionari vengono scritti, non è raro che gli accademici responsabili discutano su una sola parola.

In breve, non saresti in grado di farlo con una lingua esistente. Dovresti prendere in considerazione l'idea di inventare una tua lingua, allo scopo, o di usare una lingua abbastanza statica che è già stata inventata, come l'Interlingua o l'Esperanto. Tuttavia, anche questi non sarebbero perfetti allo scopo di definire i morfemi statici in un lessico sempre standard.

Anche in cinese, dove esiste una mappatura approssimativa del carattere al significato, non funzionerebbe ancora. Molti personaggi cambiano il loro significato a seconda del contesto e dei personaggi che li precedono o postfiggono.

Il problema è peggiore quando si tenta di tradurre tra le lingue. Potrebbe esserci una parola in inglese, che può essere utilizzata in vari casi, ma non può essere utilizzata direttamente in un'altra lingua. Un esempio di questo è "gratuito". In spagnolo, "libre" significa "libero" come nel discorso, o "gratis" significa "libero" come nella birra può essere usato (e usare la parola sbagliata al posto di "libero" sembrerebbe molto divertente).

Ci sono altre parole che sono ancora più difficili da dare un significato, come la parola bella in coreano; quando si chiama una ragazza bellissima, ci sarebbero diversi candidati per la sostituzione; ma quando si chiama cibo bello, a meno che tu non intenda che il cibo sia bello, ci sono molti altri candidati che sono completamente diversi.

Ciò a cui si riduce è che sebbene usiamo solo circa 200.000 parole in inglese, i nostri vocabolari sono in realtà più grandi in alcuni aspetti perché assegniamo molti significati diversi alla stessa parola. Gli stessi problemi si applicano all'esperanto e all'interlingua e ad ogni altra lingua significativa per la conversazione. Il linguaggio umano non è una macchina ben definita e ben oliata. Quindi, anche se potresti creare un tale lessico in cui ogni "parola" aveva il suo significato unico, sarebbe molto difficile e quasi impossibile per le macchine che usano le attuali tecniche per tradurre da qualsiasi linguaggio umano nel tuo lessico standardizzato.

Questo è il motivo per cui la traduzione automatica fa ancora schifo, e lo farà per molto tempo. Se riesci a fare meglio (e spero che tu lo sappia) allora probabilmente dovresti considerare di farlo con una sorta di borsa di studio e / o finanziamenti universitari / governativi, lavorando per un dottorato di ricerca; o semplicemente fare un mucchio di soldi, qualunque cosa mantenga la tua nave al vapore.

Altri suggerimenti

Questa domanda incide sulla linguistica più che sulla programmazione, ma per le lingue altamente sintetiche (con parole composte da più morfemi combinati), può essere un problema molto complesso cercare di "numerare". tutte le parole possibili, al contrario di lingue come l'inglese che sono almeno un po 'isolanti, o lingue come il cinese che sono altamente analitiche.

Cioè, le parole potrebbero non essere facilmente scomposte e contate in base ai loro glifi costituenti in alcune lingue.

Questo articolo di Wikipedia su Isolamento delle lingue può essere utile per spiegare il problema.

È abbastanza facile inventarne uno per te. Trasforma ogni parola in un bytestream canonico (ad esempio, UCS32 decomposto in minuscolo), quindi esegui il hash in un intero. 32 bit probabilmente sarebbero sufficienti, ma in caso contrario 64 certamente sarebbe.

Prima di doverti dare una risposta subdola, considera che lo scopo di Unicode è semplicemente quello di assegnare a ciascun glifo un identificativo univoco. Non classificarli, ordinarli o raggrupparli, ma solo mapparli su un identificatore univoco su cui tutti concordano.

In che modo il sistema gestirà la pluralizzazione dei sostantivi o la coniugazione dei verbi? Ognuno di questi avrebbe il suo "Unicode"? valore?

Come schema di traduzioni, questo probabilmente non funzionerà senza molto lavoro. Ti piacerebbe pensare di poter assegnare un numero a ciascuna parola, quindi tradurlo meccanicamente in un'altra lingua. In realtà, le lingue hanno il problema di più parole che sono scritte allo stesso modo "il vento le ha fatto esplodere i capelli" rispetto a "carica l'orologio".

Per la trasmissione di testo, dove presumibilmente avresti un alfabeto per lingua, funzionerebbe bene, anche se mi chiedo cosa guadagneresti in contrapposizione all'uso di un dizionario a lunghezza variabile, come usa ZIP.

Questa è una domanda interessante, ma sospetto che tu lo stia chiedendo per motivi sbagliati. Stai pensando a questo "Unicode" lessicale come qualcosa che ti permetterebbe di scomporre le frasi in elementi atomici di significato neutrali rispetto al linguaggio e quindi di poterli ricostituire in qualche altro linguaggio concreto? Come mezzo per realizzare un traduttore universale, forse?

Anche se puoi codificare e memorizzare, per esempio, una frase inglese usando un 'unicode lessicale', non puoi aspettarti di leggerlo e renderlo magicamente in cinese, diciamo, mantenendo intatto il significato.

La tua analogia con Unicode, tuttavia, è molto utile.

Tieni presente che Unicode, sebbene un codice "universale", non incarna la pronuncia, il significato o l'uso del personaggio in questione. Ogni punto di codice si riferisce a un glifo specifico in una lingua specifica (o meglio lo script utilizzato da un gruppo di lingue). È elementare a livello di rappresentazione visiva di un glifo (entro i limiti di stile, formattazione e caratteri). Il punto di codice Unicode per la lettera latina 'A' è proprio questo. È la lettera latina 'A'. Non può essere reso automagicamente come, per esempio, la lettera araba Alif (& # 65165;) o la lettera Indic (Devnagari) 'A' (& # 2309;).

Mantenendo l'analogia Unicode, il tuo Unicode Lexical avrebbe punti di codice per ogni parola (forma di parola) in ogni lingua. Unicode ha intervalli di punti di codice per uno script specifico. Il tuo Unicode lessicale dovrebbe avere una gamma di codici per ogni lingua. Parole diverse in lingue diverse, anche se hanno lo stesso significato (sinonimi), dovrebbero avere punti di codice diversi. La stessa parola con significati diversi o pronunce diverse (omonimi), dovrebbe avere punti di codice diversi.

In Unicode, per alcune lingue (ma non tutte) in cui lo stesso carattere ha una forma diversa a seconda della posizione nella parola, ad es. in ebraico e in arabo, la forma di un glifo cambia alla fine della parola - quindi ha un punto di codice diverso. Allo stesso modo nel tuo Unicode lessicale, se una parola ha una forma diversa a seconda della sua posizione nella frase, può giustificare il proprio punto di codice.

Forse il modo più semplice per trovare punti di codice per la lingua inglese sarebbe quello di basare il tuo sistema su una particolare edizione dell'Oxford English Dictionary e assegnare un codice univoco a ciascuna parola in sequenza. Dovrai utilizzare un codice diverso per ogni significato diverso della stessa parola e dovrai utilizzare un codice diverso per forme diverse, ad es. se la stessa parola può essere usata come nome e come verbo, allora avrai bisogno di due codici

Quindi dovrai fare lo stesso per ogni altra lingua che vuoi includere - usando il dizionario più autorevole per quella lingua.

È probabile che questo esercizio sia uno sforzo maggiore di quanto valga la pena. Se decidi di includere tutte le lingue viventi del mondo, oltre ad alcune morti storiche e alcune immaginarie - come fa Unicode - finirai con uno spazio di codice così grande che il tuo codice dovrebbe essere estremamente ampio per adattarlo. Non otterrai nulla in termini di compressione: è probabile che una frase rappresentata come stringa nella lingua originale occupi meno spazio della stessa frase rappresentata come codice.

P.S. per coloro che affermano che questo è un compito impossibile perché i significati delle parole cambiano, non lo vedo come un problema. Per usare l'analogia Unicode, l'uso delle lettere è cambiato (certamente non così rapidamente come il significato delle parole), ma non è un problema per Unicode che "th" fosse pronunciato come "y" nel Medioevo. Unicode ha un punto di codice per 't', 'h' e 'y' e ciascuno di essi ha il proprio scopo.

P.P.S. In realtà, è un po 'preoccupante per Unicode che' oe 'sia anche' & # 339; ' o che "ss" può essere scritto "& # 223;" in tedesco

Questo è un piccolo esercizio interessante, ma ti esorto a considerarlo nient'altro che un'introduzione al concetto della differenza nel linguaggio naturale tra tipi e token.

Un tipo è una singola istanza di una parola che rappresenta tutte le istanze. Un token è un singolo conteggio per ogni istanza della parola. Lasciatemi spiegare questo con il seguente esempio:

" John andò al negozio di pane. Ha comprato il pane. & Quot;

Ecco alcuni conteggi di frequenza per questo esempio, con i conteggi che indicano il numero di token:

John: 1
went: 1
to: 1
the: 2
store: 1
he: 1
bought: 1
bread: 2

Nota che " il " viene conteggiato due volte - ci sono due token di "quotazione". Tuttavia, nota che mentre ci sono dieci parole, ci sono solo otto di queste coppie parola-frequenza. Le parole vengono suddivise in tipi e abbinate al loro conteggio dei token.

Tipi e token sono utili nella PNL statistica. " Codifica lessicale " d'altra parte, farei attenzione. Questo è il seguito di approcci molto più vecchi alla PNL, con abbondanza di preprogrammazione e razionalismo. Non so nemmeno di alcun MT statistico che assegni effettivamente un "indirizzo" specifico " a una parola. Ci sono troppe relazioni tra le parole, per prima cosa, per costruire qualsiasi tipo di ontologia numerica ben ponderata, e se stiamo solo lanciando numeri alle parole per classificarle, dovremmo pensare a cose come la gestione della memoria e l'allocazione per la velocità .

Suggerirei di consultare NLTK, il Natural Language Toolkit, scritto in Python, per una più ampia introduzione alla PNL e ai suoi usi pratici.

In realtà hai solo bisogno di circa 600 parole per un vocabolario mezzo decente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top