2009-09-23 19 views
17

Esiste una libreria C# in grado di rilevare la lingua di un particolare testo? Ad esempio, per un testo di input "This is a sentence", dovrebbe rilevare la lingua come "English". O per "Esto es una sentencia" dovrebbe rilevare la lingua come "Spanish".Rileva lingua del testo

Comprendo che il rilevamento della lingua dal testo non è un problema deterministico. Ma sia Google Translate e Bing Translator hanno un'opzione "Rileva automaticamente", che meglio indovina la lingua di input. C'è qualcosa di simile disponibile pubblicamente, preferibilmente in C#?

+0

Solo l'altro giorno ho visto una delle mie pagine web intranet su un PC con Google Traduttore installato. La pagina aveva solo poche parole come ** mean ** e ** stddev ** e alcuni numeri. Google Translator mi ha detto che la pagina era in ** rumeno ** e mi ha chiesto se volevo una traduzione. Se non è un ** problema deterministico **, come può il software fare un buon lavoro? – pavium

+3

A volte fanno un buon lavoro. Naturalmente ci saranno degli input per i quali falliscono completamente, ma per gli input più probabili essi eseguono ragionevolmente bene –

+2

http://stackoverflow.com/questions/1192768/return-the-language-of-a-given-string/1192802 # 1192802 –

risposta

0

Avrai bisogno di un algoritmo di apprendimento automatico basato su catene di markov nascoste, elaborare una serie di testi in diverse lingue.

Quindi quando arriva al testo non identificato, la lingua che ha il "punteggio" più vicino è il vincitore.

1

Qui si ha un rivelatore semplice in base alle statistiche sui bigrammi (sostanzialmente significa imparare da un grande set che bigrammi verificarsi più frequentemente in ogni lingua e poi contare quelli di un pezzo di testo, confrontandole con i valori rilevati in precedenza):

http://allantech.blogspot.com/2007/07/automatic-language-detection.html

Questo è probabilmente sufficiente per molte (la maggior parte?) Applicazioni e non richiede l'accesso a Internet.

Ovviamente funzionerà peggio dell'algoritmo di Google o di Bing (che a loro volta non sono eccezionali). Se ti serve il prestazioni di rilevamento eccellenti, dovresti fare un sacco di duro lavoro e una quantità enorme di dati.

L'altra opzione sarebbe quella di sfruttare le API Google o Bing se l'app dispone di accesso a Internet.

+1

In effetti, questo approccio darà risultati abbastanza buoni. Può essere migliorato usando n-grammi invece di bi-grammi. Tuttavia, sarà sempre difficile distinguere tra lingue molto simili (ad es. Polacco e ceco). Lingue come il greco saranno molto semplici ... –

+0

Per evitare fraintendimenti, cosa diresti abbastanza bene in questo contesto? –

2

Il rilevamento della lingua è una cosa piuttosto difficile da fare.

Alcune lingue sono molto più facili da rilevare rispetto ad altre semplicemente a causa dei segni diacritici e di digraph/trigraph utilizzati. Ad esempio, double-acute accents vengono utilizzati quasi esclusivamente in ungherese. Il ‘ ’, è utilizzato esclusivamente [Credo] in turco, il t-virgola (non t-cedilla) è utilizzato solo in rumeno e il ‘ eszett ’ si verifica solo in tedesco.

Alcuni digraphs, trigraph e tetragraphs sono anche un buon give-away. Ad esempio, sarà più probabile trovare ‘ eeuw ’ e ‘ ieuw ’ principalmente in olandese, e ‘ tsch ’ e ‘ DSCH ’ principalmente in tedesco, ecc

Più omaggi includerebbero parole comuni o prefissi comuni/suffissi utilizzati in una lingua particolare A volte anche la punteggiatura utilizzata può aiutare a determinare una lingua (stile di citazione e uso, ecc.).

Se esiste una libreria di questo tipo, mi piacerebbe saperlo, dal momento che sto lavorando a uno stesso.

+0

Si dovrebbe pensare a un classificatore basato su n-grammi più generico basato su un corpus di addestramento. –

0

ho trovato che "textcat" è molto utile per questo.Ho utilizzato un'implementazione PHP, PHP Text Cat, basata su questo this original implementation e l'ho trovata affidabile. Se dai un'occhiata alle fonti, scoprirai che non è una cosa terribilmente difficile da attuare nella lingua che hai scelto. Il duro lavoro - le combinazioni di lettere che sono rilevanti per una particolare lingua - è tutto lì dentro come dati.

26

Sì, infatti, TextCat è molto utile per l'identificazione della lingua. E ha molte implementazioni in diverse lingue.

Non c'erano porte in .Net. Quindi ne ho scritto uno: NTextCat (NuGet, Online Demo).

È il puro .NET Framework DLL + interfaccia a riga di comando. Per impostazione predefinita, utilizza un profilo di 14 lingue.

Qualsiasi feedback è molto apprezzato! Nuove idee e richieste sono accolti troppo :)

+1

Provato NTextCat oggi, ed è molto facile lavorare con! –

+0

Grazie per averlo usato! Ogni particolare feedback è molto apprezzato. Si prega di inviare il vostro feedback (se presente) [in questa pagina] (http://ntextcat.codeplex.com/discussions) –

+0

Bene, non ha riconosciuto lettone .. – Edgar

Problemi correlati