prose é uma biblioteca de processamento de linguagem natural (apenas em inglês, no momento) em Pure Go . Ele suporta tokenização, segmentação, marcação de parte da fala e extração de entidade denominada.
Você pode encontrar um resumo mais detalhado sobre o desempenho da biblioteca aqui: Apresentando prose v2.0.0: trazendo o PNL para ir .
$ go get github.com/jdkato/prose/v2 package main
import (
"fmt"
"log"
"github.com/jdkato/prose/v2"
)
func main () {
// Create a new document with the default configuration:
doc , err := prose . NewDocument ( "Go is an open-source programming language created at Google." )
if err != nil {
log . Fatal ( err )
}
// Iterate over the doc's tokens:
for _ , tok := range doc . Tokens () {
fmt . Println ( tok . Text , tok . Tag , tok . Label )
// Go NNP B-GPE
// is VBZ O
// an DT O
// ...
}
// Iterate over the doc's named-entities:
for _ , ent := range doc . Entities () {
fmt . Println ( ent . Text , ent . Label )
// Go GPE
// Google GPE
}
// Iterate over the doc's sentences:
for _ , sent := range doc . Sentences () {
fmt . Println ( sent . Text )
// Go is an open-source programming language created at Google.
}
}O processo de criação de documentos adere à seguinte sequência de etapas:
tokenization -> POS tagging -> NE extraction
segmentation
Cada etapa pode ser desativado (assumindo que as etapas posteriores não sejam necessárias) passando a opção funcional apropriada. Para desativar a extração de entidade nomeada, por exemplo, você faria o seguinte:
doc , err := prose . NewDocument (
"Go is an open-source programming language created at Google." ,
prose . WithExtraction ( false )) prose inclui um tokenizador capaz de processar o texto moderno, incluindo os extensões de caracteres não palavras mostradas abaixo.
| Tipo | Exemplo |
|---|---|
| Endereços de e -mail | [email protected] |
| Hashtags | #trending |
| Menções | @jdkato |
| URLs | https://github.com/jdkato/prose |
| Emoticons | :-) , >:( , o_0 , etc. |
package main
import (
"fmt"
"log"
"github.com/jdkato/prose/v2"
)
func main () {
// Create a new document with the default configuration:
doc , err := prose . NewDocument ( "@jdkato, go to http://example.com thanks :)." )
if err != nil {
log . Fatal ( err )
}
// Iterate over the doc's tokens:
for _ , tok := range doc . Tokens () {
fmt . Println ( tok . Text , tok . Tag )
// @jdkato NN
// , ,
// go VB
// to TO
// http://example.com NN
// thanks NNS
// :) SYM
// . .
}
} prose inclui um dos segmentadores de frases mais precisos disponíveis, de acordo com as regras de ouro criadas pelos desenvolvedores do pragmatic_segmenter .
| Nome | Linguagem | Licença | GRS (inglês) | GRS (outro) | Velocidade† |
|---|---|---|---|---|---|
| Segmento pragmático | Rubi | Mit | 98,08% (51/52) | 100,00% | 3,84 s |
| prosa | Ir | Mit | 75,00% (39/52) | N / D | 0,96 s |
| TATTILTOKENZER | Rubi | GNU GPLV3 | 65,38% (34/52) | 48,57% | 46.32 s |
| Opennlp | Java | Aplv2 | 59,62% (31/52) | 45,71% | 1,27 s |
| Standford Corenlp | Java | GNU GPLV3 | 59,62% (31/52) | 31,43% | 0,92 s |
| Splitta | Python | Aplv2 | 55,77% (29/52) | 37,14% | N / D |
| Punkt | Python | Aplv2 | 46,15% (24/52) | 48,57% | 1,79 s |
| SRX English | Rubi | GNU GPLV3 | 30,77% (16/52) | 28,57% | 6.19 s |
| Scapel | Rubi | GNU GPLV3 | 28,85% (15/52) | 20,00% | 0,13 s |
† Os testes originais foram realizados usando um MacBook Pro 3,7 GHz quad-core Intel Xeon E5 em execução 10.9.5 , enquanto
prosefoi cronometrada usando um MacBook Pro 2,9 GHz Intel Core i7 em execução 10.13.3 .
package main
import (
"fmt"
"strings"
"github.com/jdkato/prose/v2"
)
func main () {
// Create a new document with the default configuration:
doc , _ := prose . NewDocument ( strings . Join ([] string {
"I can see Mt. Fuji from here." ,
"St. Michael's Church is on 5th st. near the light." }, " " ))
// Iterate over the doc's sentences:
sents := doc . Sentences ()
fmt . Println ( len ( sents )) // 2
for _ , sent := range sents {
fmt . Println ( sent . Text )
// I can see Mt. Fuji from here.
// St. Michael's Church is on 5th st. near the light.
}
} prose inclui um tagger baseado no tagger "rápido e preciso" do TextBlob. Abaixo está uma comparação de seu desempenho com a implementação do NLTK do mesmo tagger no Corpus Treebank:
| Biblioteca | Precisão | Média de 5 corridas (seg) |
|---|---|---|
| Nltk | 0,893 | 7.224 |
prose | 0,961 | 2.538 |
(Consulte scripts/test_model.py para obter mais informações.)
A lista completa de tags POS suportadas é fornecida abaixo.
| MARCAÇÃO | DESCRIÇÃO |
|---|---|
( | Suporte redondo esquerdo |
) | Suporte redondo direito |
, | vírgula |
: | cólon |
. | período |
'' | Quarta de cotação de fechamento |
`` | Abertura da cotação |
# | sinal de número |
$ | moeda |
CC | Conjunção, coordenação |
CD | Número do cardeal |
DT | determinante |
EX | existencial lá |
FW | Palavra estrangeira |
IN | conjunção, subordinada ou preposição |
JJ | adjetivo |
JJR | adjetivo, comparativo |
JJS | adjetivo, superlativo |
LS | Marcador de itens da lista |
MD | Verbo, auxiliar modal |
NN | substantivo, singular ou massa |
NNP | substantivo, singular adequado |
NNPS | substantivo, plural adequado |
NNS | substantivo, plural |
PDT | PREDETERMINER |
POS | final possessivo |
PRP | Pronome, pessoal |
PRP$ | pronome, possessivo |
RB | advérbio |
RBR | Advérbio, comparativo |
RBS | Advérbio, superlativo |
RP | Advérbio, partícula |
SYM | símbolo |
TO | Infinitival para |
UH | interjeição |
VB | verbo, forma base |
VBD | verbo, passado |
VBG | verbo, gerúndio ou particípio presente |
VBN | verbo, particípio passado |
VBP | Verbo, presença não 3ª pessoa |
VBZ | Verbo, Presente Singular da 3ª pessoa |
WDT | WH-Determiner |
WP | WH-Pronoun, pessoal |
WP$ | WH-Pronoun, possessivo |
WRB | wh-adverbo |
prose v2.0.0 inclui uma versão muito aprimorada do pacote de chunks da v1.0.0, que pode identificar pessoas ( PERSON ) e entidades geográficas/políticas ( GPE ) por padrão.
package main
import (
"github.com/jdkato/prose/v2"
)
func main () {
doc , _ := prose . NewDocument ( "Lebron James plays basketball in Los Angeles." )
for _ , ent := range doc . Entities () {
fmt . Println ( ent . Text , ent . Label )
// Lebron James PERSON
// Los Angeles GPE
}
} No entanto, na tentativa de tornar esse recurso mais útil, tornamos simples treinar seus próprios modelos para casos de uso específicos. Veja Prodigy + prose : Ensino de máquina radicalmente eficiente em GO para um tutorial.