prose هي مكتبة معالجة اللغة الطبيعية (الإنجليزية فقط ، في الوقت الحالي) في Pure Go . وهو يدعم الرمز المميز ، والتجزئة ، وعلامة جزء من الكلام ، واستخلاص المسمى.
يمكنك العثور على ملخص أكثر تفصيلاً عن أداء المكتبة هنا: تقديم prose v2.0.0: جلب NLP للذهاب .
$ 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
// . .
}
} يتضمن prose أحد أهم قطاعات الجملة المتاحة ، وفقًا للقواعد الذهبية التي أنشأها مطورو pragmatic_segmenter .
| اسم | لغة | رخصة | GRS (الإنجليزية) | GRS (آخر) | سرعة† |
|---|---|---|---|---|---|
| شريحة براغماتية | روبي | معهد ماساتشوستس للتكنولوجيا | 98.08 ٪ (51/52) | 100.00 ٪ | 3.84 ق |
| نثر | يذهب | معهد ماساتشوستس للتكنولوجيا | 75.00 ٪ (39/52) | ن/أ | 0.96 ق |
| Tastfultokenizer | روبي | GNU GPLV3 | 65.38 ٪ (34/52) | 48.57 ٪ | 46.32 ق |
| OpenNLP | جافا | APLV2 | 59.62 ٪ (31/52) | 45.71 ٪ | 1.27 ق |
| Standford Corenlp | جافا | GNU GPLV3 | 59.62 ٪ (31/52) | 31.43 ٪ | 0.92 ق |
| Splitta | بيثون | APLV2 | 55.77 ٪ (29/52) | 37.14 ٪ | ن/أ |
| Punkt | بيثون | APLV2 | 46.15 ٪ (24/52) | 48.57 ٪ | 1.79 ق |
| SRX English | روبي | GNU GPLV3 | 30.77 ٪ (16/52) | 28.57 ٪ | 6.19 ق |
| Scapel | روبي | GNU GPLV3 | 28.85 ٪ (15/52) | 20.00 ٪ | 0.13 ق |
† تم إجراء الاختبارات الأصلية باستخدام MacBook Pro 3.7 GHz رباعي النواة intel Xeon E5 الذي يعمل 10.9.5 ، بينما تم توقيت
proseباستخدام MacBook Pro 2.9 GHz Intel Core I7 Running 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 tagger يعتمد على TextBlob "Fast and Dicate". فيما يلي مقارنة بين أدائها مقابل تنفيذ NLTK لنفس التاج على مجموعة Treebank:
| مكتبة | دقة | متوسط 5-RUN (SEC) |
|---|---|---|
| NLTK | 0.893 | 7.224 |
prose | 0.961 | 2.538 |
(انظر scripts/test_model.py لمزيد من المعلومات.)
فيما يلي القائمة الكاملة لعلامات نقاط البيع المدعومة.
| علامة | وصف |
|---|---|
( | جولة اليسار قوس |
) | قوس جولة يمين |
, | فاصلة |
: | القولون |
. | فترة |
'' | علامة الاقتباس الإغلاق |
`` | افتتاح علامة الاقتباس |
# | علامة العدد |
$ | عملة |
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 | infinitival ل |
UH | التدخل |
VB | الفعل ، شكل قاعدة |
VBD | الفعل ، المضارع الماضي |
VBG | الفعل ، جيروند أو النعت الحالي |
VBN | الفعل ، النعت الماضي |
VBP | الفعل ، الشخص غير الثالث الحاضر المفرد |
VBZ | الفعل ، الشخص الثالث الحاضر المفرد |
WDT | WH-DECRENTER |
WP | WH-PRONOON ، شخصية |
WP$ | WH-PRONOON ، التملك |
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 : تعليم الماكينة فعالة بشكل جذري في برنامج تعليمي.