prose 는 Pure Go 의 자연 언어 처리 라이브러리 (현재 영어 만)입니다. 토큰 화, 세분화, 부품 태깅 및 명명 된 엔티티 추출을 지원합니다.
라이브러리의 성능에 대한보다 자세한 prose 은 다음 과 같습니다.
$ 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.
}
}문서 작성 프로세스는 다음과 같은 단계를 준수합니다.
tokenization -> POS tagging -> NE extraction
segmentation
적절한 기능적 옵션을 전달하여 각 단계가 비활성화 될 수 있습니다 (나중 단계가 필요하지 않다고 가정). 예를 들어 명명 된 엔티티 추출을 비활성화하려면 다음을 수행합니다.
doc , err := prose . NewDocument (
"Go is an open-source programming language created at Google." ,
prose . WithExtraction ( false )) prose 아래에 표시된 비 단어 문자 스팬을 포함하여 현대 텍스트를 처리 할 수있는 토큰 화제가 포함되어 있습니다.
| 유형 | 예 |
|---|---|
| 이메일 주소 | [email protected] |
| 해시 태그 | #trending |
| 언급 | @jdkato |
| URL | https://github.com/jdkato/prose |
| 이모티콘 | :-) , >:( , o_0 등 |
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
// . .
}
} pragmatic_segmenter 의 개발자가 만든 황금 규칙에 따라 prose 에는 가장 정확한 문장 세그먼테르 중 하나가 포함되어 있습니다.
| 이름 | 언어 | 특허 | GRS (영어) | GRS (기타) | 속도† |
|---|---|---|---|---|---|
| 실용적인 세그먼트 | 루비 | MIT | 98.08% (51/52) | 100.00% | 3.84 s |
| 산문 | 가다 | MIT | 75.00% (39/52) | N/A | 0.96 s |
| Tactfultokenizer | 루비 | GNU GPLV3 | 65.38% (34/52) | 48.57% | 46.32 s |
| Opennlp | 자바 | APLV2 | 59.62% (31/52) | 45.71% | 1.27 s |
| Standford Corenlp | 자바 | GNU GPLV3 | 59.62% (31/52) | 31.43% | 0.92 s |
| 분할 | 파이썬 | APLV2 | 55.77% (29/52) | 37.14% | N/A |
| 펑트 | 파이썬 | APLV2 | 46.15% (24/52) | 48.57% | 1.79 s |
| SRX 영어 | 루비 | GNU GPLV3 | 30.77% (16/52) | 28.57% | 6.19 s |
| 교활함 | 루비 | GNU GPLV3 | 28.85% (15/52) | 20.00% | 0.13 s |
† 원래 테스트는 MacBook Pro 3.7 GHz Quad-Core Intel Xeon E5 10.9.5를 사용하여 수행되었으며,
prose10.13.3을 실행하는 MacBook Pro 2.9 GHz Intel Core I7을 사용하여 시간을 보냈습니다.
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 에는 TextBlob의 "빠르고 정확한"POS Tagger를 기반으로하는 Tagger가 포함되어 있습니다. 다음은 NLTK의 TreeBank 코퍼스에서 동일한 태그를 구현하는 것과의 성능을 비교 한 것입니다.
| 도서관 | 정확성 | 5 번 평균 (SEC) |
|---|---|---|
| nltk | 0.893 | 7.224 |
prose | 0.961 | 2.538 |
자세한 내용은 scripts/test_model.py 참조하십시오.)
지원되는 POS 태그의 전체 목록은 다음과 같습니다.
| 꼬리표 | 설명 |
|---|---|
( | 왼쪽 둥근 브래킷 |
) | 오른쪽 둥근 브래킷 |
, | 콤마 |
: | 콜론 |
. | 기간 |
'' | 닫는 견적 마크 |
`` | 개방 따옴표 |
# | 번호 부호 |
$ | 통화 |
CC | 결합, 조정 |
CD | 추기경 번호 |
DT | 결정자 |
EX | 거기에 실존 적 |
FW | 외국어 |
IN | 결합, 종속 또는 전치사 |
JJ | 형용사 |
JJR | 형용사, 비교 |
JJS | 형용사, 최상급 |
LS | 항목 마커를 나열하십시오 |
MD | 동사, 모달 보조 |
NN | 명사, 단수 또는 질량 |
NNP | 명사, 적절한 단수 |
NNPS | 명사, 적절한 복수 |
NNS | 명사, 복수 |
PDT | 전임자 |
POS | 소유 결말 |
PRP | 대명사, 개인 |
PRP$ | 대명사, 소유 |
RB | 부사 |
RBR | 부사, 비교 |
RBS | 부사, 최상급 |
RP | 부사, 입자 |
SYM | 상징 |
TO | 무한 |
UH | 감탄사 |
VB | 동사, 기본 형태 |
VBD | 동사, 과거 시제 |
VBG | 동사, gerund 또는 현재 분사 |
VBN | 동사, 과거 분사 |
VBP | 동사, 비 제 3 사람 특이한 선물 |
VBZ | 동사, 세 번째 사람 특이한 선물 |
WDT | Wh-Determiner |
WP | WH 크로운, 개인 |
WP$ | WH 크로운, 소유 |
WRB | Wh-adverb |
prose v2.0.0에는 v1.0.0의 청크 패키지의 훨씬 개선 된 버전이 포함되어 있으며, 기본적으로 사람 ( PERSON ) 및 지리적/정치 단체 ( GPE )를 식별 할 수 있습니다.
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
}
} 그러나이 기능을보다 유용하게 만들기 위해 특정 사용 사례를 위해 자신의 모델을 훈련시키는 것이 간단하게 만들었습니다. Prodigy + prose : 튜토리얼을 위해 Go에서 근본적으로 효율적인 기계 교육을 참조하십시오.