prose adalah perpustakaan pemrosesan bahasa alami (hanya bahasa Inggris, saat ini) dalam perjalanan murni . Ini mendukung tokenisasi, segmentasi, penandaan bagian-of-speech, dan ekstraksi entitas yang dinamai.
Anda dapat menemukan ringkasan yang lebih rinci tentang kinerja perpustakaan di sini: Memperkenalkan prose v2.0.0: Membawa NLP untuk pergi .
$ 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.
}
}Proses penciptaan dokumen mematuhi urutan langkah-langkah berikut:
tokenization -> POS tagging -> NE extraction
segmentation
Setiap langkah dapat dinonaktifkan (dengan asumsi langkah -langkah selanjutnya tidak diperlukan) dengan melewati opsi fungsional yang sesuai. Untuk menonaktifkan ekstraksi entitas yang dinamai, misalnya, Anda akan melakukan hal berikut:
doc , err := prose . NewDocument (
"Go is an open-source programming language created at Google." ,
prose . WithExtraction ( false )) prose termasuk tokenizer yang mampu memproses teks modern, termasuk rentang karakter non-kata yang ditunjukkan di bawah ini.
| Jenis | Contoh |
|---|---|
| Alamat email | [email protected] |
| Tagar | #trending |
| Menyebutkan | @jdkato |
| URL | https://github.com/jdkato/prose |
| Emotikon | :-) , >:( , o_0 , dll. |
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 termasuk salah satu segmen kalimat paling akurat yang tersedia, sesuai dengan aturan emas yang dibuat oleh pengembang pragmatic_segmenter .
| Nama | Bahasa | Lisensi | GRS (Bahasa Inggris) | GRS (Lainnya) | Kecepatan† |
|---|---|---|---|---|---|
| Segmen pragmatis | Rubi | Mit | 98,08% (51/52) | 100,00% | 3.84 s |
| prosa | Pergi | Mit | 75,00% (39/52) | N/a | 0,96 s |
| Tactfultokenizer | Rubi | GNU GPLV3 | 65,38% (34/52) | 48,57% | 46.32 s |
| Opennlp | Jawa | Aplv2 | 59,62% (31/52) | 45,71% | 1.27 s |
| Standford Corenlp | Jawa | GNU GPLV3 | 59,62% (31/52) | 31,43% | 0,92 s |
| Splitta | Python | Aplv2 | 55,77% (29/52) | 37,14% | N/a |
| Punkt | Python | Aplv2 | 46,15% (24/52) | 48,57% | 1.79 s |
| SRX Bahasa Inggris | 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 |
† Tes asli dilakukan dengan menggunakan MacBook Pro 3.7 GHz quad-core Intel Xeon E5 berjalan 10.9.5 , sementara
prosediatur waktunya menggunakan MacBook Pro 2.9 GHz Intel Core i7 yang berjalan 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 termasuk tagger berdasarkan tagger POS "cepat dan akurat" TextBlob. Di bawah ini adalah perbandingan kinerjanya dengan implementasi NLTK dari tagger yang sama di Treebank Corpus:
| Perpustakaan | Ketepatan | Rata-rata 5-lari (detik) |
|---|---|---|
| Nltk | 0.893 | 7.224 |
prose | 0.961 | 2.538 |
(Lihat scripts/test_model.py untuk informasi lebih lanjut.)
Daftar lengkap tag POS yang didukung diberikan di bawah ini.
| MENANDAI | KETERANGAN |
|---|---|
( | Braket bundar kiri |
) | Braket bulat kanan |
, | koma |
: | usus besar |
. | periode |
'' | tanda kutip penutupan |
`` | tanda kutip pembukaan |
# | tanda angka |
$ | mata uang |
CC | konjungsi, koordinasi |
CD | Nomor Kardinal |
DT | penentu |
EX | eksistensial di sana |
FW | kata asing |
IN | konjungsi, subordinasi atau preposisi |
JJ | kata sifat |
JJR | kata sifat, komparatif |
JJS | kata sifat, superlatif |
LS | daftar penanda item |
MD | kata kerja, bantu modal |
NN | kata benda, tunggal atau massa |
NNP | kata benda, tunggal yang tepat |
NNPS | kata benda, jamak yang tepat |
NNS | kata benda, jamak |
PDT | pendahulunya |
POS | akhir posesif |
PRP | kata ganti, pribadi |
PRP$ | kata ganti, posesif |
RB | kata keterangan |
RBR | kata keterangan, komparatif |
RBS | kata keterangan, superlatif |
RP | kata keterangan, partikel |
SYM | simbol |
TO | Infinitival to |
UH | kata seru |
VB | kata kerja, bentuk dasar |
VBD | kata kerja, lampau |
VBG | kata kerja, gerund atau participle present |
VBN | kata kerja, participle lewat |
VBP | kata kerja, hadiah tunggal orang non-ke-3 |
VBZ | kata kerja, hadiah tunggal orang ke -3 |
WDT | WH-DETERMINER |
WP | wh-pronoun, pribadi |
WP$ | wh-pronoun, posesif |
WRB | WH-Adverb |
prose v2.0.0 mencakup versi yang jauh lebih baik dari paket chunk V1.0.0, yang dapat mengidentifikasi orang ( PERSON ) dan entitas geografis/politik ( GPE ) secara default.
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
}
} Namun, dalam upaya untuk membuat fitur ini lebih berguna, kami telah membuatnya langsung untuk melatih model Anda sendiri untuk kasus penggunaan tertentu. Lihat Prodigy + prose : Pengajaran mesin yang efisien secara radikal di Go for a Tutorial.