Ruby-spacy عبارة عن وحدة مجمعة لاستخدام spaCy من لغة برمجة Ruby عبر PyCall. تهدف هذه الوحدة إلى تسهيل استخدام مبرمجي Ruby لـ spaCy. تغطي هذه الوحدة مجالات وظيفة spaCy لاستخدام العديد من أنواع نماذج اللغة الخاصة بها، وليس لبناء نماذج منها.
الوظيفة | |
---|---|
✅ | الترميز، والتجسيد، وتجزئة الجملة |
✅ | وضع علامات على جزء من الكلام وتحليل التبعية |
✅ | التعرف على الكيان المسمى |
✅ | تصور التبعية النحوية |
✅ | الوصول إلى ناقلات الكلمات المدربة مسبقًا |
✅ | تكامل OpenAI Chat/Completion/Embeddings API |
الإصدار الحالي: 0.2.3
هام : تأكد من تمكين خيار enable-shared
في تثبيت Python الخاص بك. يمكنك استخدام pyenv لتثبيت أي إصدار تريده من Python. قم بتثبيت Python 3.10.6، على سبيل المثال، باستخدام pyenv مع enable-shared
كما يلي:
$ env CONFIGURE_OPTS= " --enable-shared " pyenv install 3.10.6
تذكر أن تجعله متاحًا من دليل العمل الخاص بك. من المستحسن أن تقوم بتعيين global
على إصدار python الذي قمت بتثبيته للتو.
$ pyenv global 3.10.6
ثم قم بتثبيت SpaCy. إذا كنت تستخدم pip
، فسيتم تنفيذ الأمر التالي:
$ pip install spacy
تثبيت نماذج اللغة المدربة. بالنسبة للمبتدئين، سيكون en_core_web_sm
هو الأكثر فائدة لإجراء معالجة النصوص الأساسية باللغة الإنجليزية. ومع ذلك، إذا كنت تريد استخدام الميزات المتقدمة لـ spaCy، مثل التعرف على الكيانات المسماة أو حساب تشابه المستندات، فيجب عليك أيضًا تثبيت نموذج أكبر مثل en_core_web_lg
.
$ python -m spacy download en_core_web_sm
$ python -m spacy download en_core_web_lg
راجع Spacy: النماذج واللغات لنماذج أخرى بلغات مختلفة. لتثبيت نماذج للغة اليابانية، على سبيل المثال، يمكنك القيام بذلك على النحو التالي:
$ python -m spacy download ja_core_news_sm
$ python -m spacy download ja_core_news_lg
أضف هذا السطر إلى ملف Gemfile الخاص بالتطبيق الخاص بك:
gem 'ruby-spacy'
ومن ثم تنفيذ:
$ bundle install
أو قم بتثبيته بنفسك على النحو التالي:
$ gem install ruby-spacy
انظر الأمثلة أدناه.
العديد من الأمثلة التالية هي ترجمات Python-to-Ruby لمقتطفات التعليمات البرمجية في spaCy 101. لمزيد من الأمثلة، انظر داخل دليل examples
.
→ spaCy: الترميز
رمز روبي:
require "ruby-spacy"
require "terminal-table"
nlp = Spacy :: Language . new ( "en_core_web_sm" )
doc = nlp . read ( "Apple is looking at buying U.K. startup for $1 billion" )
row = [ ]
doc . each do | token |
row << token . text
end
headings = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ]
table = Terminal :: Table . new rows : [ row ] , headings : headings
puts table
الإخراج:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
---|---|---|---|---|---|---|---|---|---|---|
تفاحة | يكون | أبحث | في | شراء | المملكة المتحدة | بدء | ل | $ | 1 | مليار |
→ spaCy: علامات وتبعيات جزء من الكلام
رمز روبي:
require "ruby-spacy"
require "terminal-table"
nlp = Spacy :: Language . new ( "en_core_web_sm" )
doc = nlp . read ( "Apple is looking at buying U.K. startup for $1 billion" )
headings = [ "text" , "lemma" , "pos" , "tag" , "dep" ]
rows = [ ]
doc . each do | token |
rows << [ token . text , token . lemma , token . pos , token . tag , token . dep ]
end
table = Terminal :: Table . new rows : rows , headings : headings
puts table
الإخراج:
نص | lemma | نقاط البيع | علامة | إقلاع |
---|---|---|---|---|
تفاحة | تفاحة | بروبن | ننب | nsubj |
يكون | يكون | ايه يو اكس | VBZ | مساعد |
أبحث | ينظر | الفعل | VBG | جذر |
في | في | شرطة أبوظبي | في | الإعدادية |
شراء | يشتري | الفعل | VBG | com.pcomp |
المملكة المتحدة | المملكة المتحدة | بروبن | ننب | dobj |
بدء | بدء | اسم | ن | com.advcl |
ل | ل | شرطة أبوظبي | في | الإعدادية |
$ | $ | SYM | $ | com.quantmod |
1 | 1 | رقم | قرص مضغوط | مُجَمَّع |
مليار | مليار | رقم | قرص مضغوط | com.pobj |
رمز روبي:
require "ruby-spacy"
require "terminal-table"
nlp = Spacy :: Language . new ( "ja_core_news_lg" )
doc = nlp . read ( "任天堂は1983年にファミコンを14,800円で発売した。" )
headings = [ "text" , "lemma" , "pos" , "tag" , "dep" ]
rows = [ ]
doc . each do | token |
rows << [ token . text , token . lemma , token . pos , token . tag , token . dep ]
end
table = Terminal :: Table . new rows : rows , headings : headings
puts table
الإخراج:
نص | lemma | نقاط البيع | علامة | إقلاع |
---|---|---|---|---|
任天堂 | 任天堂 | بروبن | 名詞-固有名詞-一般 | nsubj |
は | は | شرطة أبوظبي | 助詞-係助詞 | قضية |
1983 | 1983 | رقم | 名詞-数詞 | nummod |
年 | 年 | اسم | 名詞-普通名詞-助数詞可能 | obl |
に | に | شرطة أبوظبي | 助詞-格助詞 | قضية |
ファミコン | ファミコン | اسم | 名詞-普通名詞-一般 | obj |
を | を | شرطة أبوظبي | 助詞-格助詞 | قضية |
14800 | 14800 | رقم | 名詞-数詞 | مُثَبَّت |
円 | 円 | اسم | 名詞-普通名詞-助数詞可能 | obl |
で | で | شرطة أبوظبي | 助詞-格助詞 | قضية |
発売 | 発売 | الفعل | 名詞-普通名詞-サ変可能 | جذر |
し | する | ايه يو اكس | 動詞-非自立可能 | مساعد |
た | た | ايه يو اكس | 助動詞 | مساعد |
. | . | نقطة | 補助記号-句点 | نقطة |
→ نقاط البيع وعلامات التشكل
رمز روبي:
require "ruby-spacy"
require "terminal-table"
nlp = Spacy :: Language . new ( "en_core_web_sm" )
doc = nlp . read ( "Apple is looking at buying U.K. startup for $1 billion" )
headings = [ "text" , "shape" , "is_alpha" , "is_stop" , "morphology" ]
rows = [ ]
doc . each do | token |
morph = token . morphology . map do | k , v |
" #{ k } = #{ v } "
end . join ( " n " )
rows << [ token . text , token . shape , token . is_alpha , token . is_stop , morph ]
end
table = Terminal :: Table . new rows : rows , headings : headings
puts table
الإخراج:
نص | شكل | is_alpha | is_stop | التشكل |
---|---|---|---|---|
تفاحة | كسكسكسكسكس | حقيقي | خطأ شنيع | NounType = Prop الرقم = الغناء |
يكون | xx | حقيقي | حقيقي | المزاج = الصناعية الرقم = الغناء شخص = 3 التوتر = العرض VerbForm = Fin |
أبحث | xxx | حقيقي | خطأ شنيع | الجانب = البرنامج التوتر = العرض VerbForm = جزء |
في | xx | حقيقي | حقيقي | |
شراء | xxx | حقيقي | خطأ شنيع | الجانب = البرنامج التوتر = العرض VerbForm = جزء |
المملكة المتحدة | العشرين | خطأ شنيع | خطأ شنيع | NounType = Prop الرقم = الغناء |
بدء | xxx | حقيقي | خطأ شنيع | الرقم = الغناء |
ل | xxx | حقيقي | حقيقي | |
$ | $ | خطأ شنيع | خطأ شنيع | |
1 | د | خطأ شنيع | خطأ شنيع | NumType = Card |
مليار | xxx | حقيقي | خطأ شنيع | NumType = Card |
→ سباسي: المتخيلون
رمز روبي:
require "ruby-spacy"
nlp = Spacy :: Language . new ( "en_core_web_sm" )
sentence = "Autonomous cars shift insurance liability toward manufacturers"
doc = nlp . read ( sentence )
dep_svg = doc . displacy ( style : "dep" , compact : false )
File . open ( File . join ( "test_dep.svg" ) , "w" ) do | file |
file . write ( dep_svg )
end
الإخراج:
رمز روبي:
require "ruby-spacy"
nlp = Spacy :: Language . new ( "en_core_web_sm" )
sentence = "Autonomous cars shift insurance liability toward manufacturers"
doc = nlp . read ( sentence )
dep_svg = doc . displacy ( style : "dep" , compact : true )
File . open ( File . join ( "test_dep_compact.svg" ) , "w" ) do | file |
file . write ( dep_svg )
end
الإخراج:
→ spaCy: الكيانات المسماة
رمز روبي:
require "ruby-spacy"
require "terminal-table"
nlp = Spacy :: Language . new ( "en_core_web_sm" )
doc = nlp . read ( "Apple is looking at buying U.K. startup for $1 billion" )
rows = [ ]
doc . ents . each do | ent |
rows << [ ent . text , ent . start_char , ent . end_char , ent . label ]
end
headings = [ "text" , "start_char" , "end_char" , "label" ]
table = Terminal :: Table . new rows : rows , headings : headings
puts table
الإخراج:
نص | start_char | end_char | ملصق |
---|---|---|---|
تفاحة | 0 | 5 | ORG |
المملكة المتحدة | 27 | 31 | GPE |
1 مليار دولار | 44 | 54 | مال |
رمز روبي:
require ( "ruby-spacy" )
require "terminal-table"
nlp = Spacy :: Language . new ( "ja_core_news_lg" )
sentence = "任天堂は1983年にファミコンを14,800円で発売した。"
doc = nlp . read ( sentence )
rows = [ ]
doc . ents . each do | ent |
rows << [ ent . text , ent . start_char , ent . end_char , ent . label ]
end
headings = [ "text" , "start" , "end" , "label" ]
table = Terminal :: Table . new rows : rows , headings : headings
print table
الإخراج:
نص | يبدأ | نهاية | ملصق |
---|---|---|---|
任天堂 | 0 | 3 | ORG |
1983 سنة | 4 | 9 | تاريخ |
ファミコン | 10 | 15 | منتج |
14,800 ريال | 16 | 23 | مال |
→ spaCy: ناقلات الكلمات والتشابه
رمز روبي:
require "ruby-spacy"
require "terminal-table"
nlp = Spacy :: Language . new ( "en_core_web_lg" )
doc = nlp . read ( "dog cat banana afskfsd" )
rows = [ ]
doc . each do | token |
rows << [ token . text , token . has_vector , token . vector_norm , token . is_oov ]
end
headings = [ "text" , "has_vector" , "vector_norm" , "is_oov" ]
table = Terminal :: Table . new rows : rows , headings : headings
puts table
الإخراج:
نص | has_vector | Vector_norm | is_oov |
---|---|---|---|
كلب | حقيقي | 7.0336733 | خطأ شنيع |
قطة | حقيقي | 6.6808186 | خطأ شنيع |
موز | حقيقي | 6.700014 | خطأ شنيع |
com.afskfsd | خطأ شنيع | 0.0 | حقيقي |
رمز روبي:
require "ruby-spacy"
nlp = Spacy :: Language . new ( "en_core_web_lg" )
doc1 = nlp . read ( "I like salty fries and hamburgers." )
doc2 = nlp . read ( "Fast food tastes very good." )
puts "Doc 1: " + doc1 . text
puts "Doc 2: " + doc2 . text
puts "Similarity: #{ doc1 . similarity ( doc2 ) } "
الإخراج:
Doc 1: I like salty fries and hamburgers.
Doc 2: Fast food tastes very good.
Similarity: 0.7687607012190486
رمز روبي:
require "ruby-spacy"
nlp = Spacy :: Language . new ( "ja_core_news_lg" )
ja_doc1 = nlp . read ( "今日は雨ばっかり降って、嫌な天気ですね。" )
puts "doc1: #{ ja_doc1 . text } "
ja_doc2 = nlp . read ( "あいにくの悪天候で残念です。" )
puts "doc2: #{ ja_doc2 . text } "
puts "Similarity: #{ ja_doc1 . similarity ( ja_doc2 ) } "
الإخراج:
doc1: 今日は雨ばっかり降って、嫌な天気ですね。
doc2: あいにくの悪天候で残念です。
Similarity: 0.8684192637149641
طوكيو - اليابان + فرنسا = باريس؟
رمز روبي:
require "ruby-spacy"
require "terminal-table"
nlp = Spacy :: Language . new ( "en_core_web_lg" )
tokyo = nlp . get_lexeme ( "Tokyo" )
japan = nlp . get_lexeme ( "Japan" )
france = nlp . get_lexeme ( "France" )
query = tokyo . vector - japan . vector + france . vector
headings = [ "rank" , "text" , "score" ]
rows = [ ]
results = nlp . most_similar ( query , 10 )
results . each_with_index do | lexeme , i |
index = ( i + 1 ) . to_s
rows << [ index , lexeme . text , lexeme . score ]
end
table = Terminal :: Table . new rows : rows , headings : headings
puts table
الإخراج:
رتبة | نص | نتيجة |
---|---|---|
1 | فرنسا | 0.8346999883651733 |
2 | فرنسا | 0.8346999883651733 |
3 | فرنسا | 0.8346999883651733 |
4 | باريس | 0.7703999876976013 |
5 | باريس | 0.7703999876976013 |
6 | باريس | 0.7703999876976013 |
7 | تولوز | 0.6381999850273132 |
8 | تولوز | 0.6381999850273132 |
9 | تولوز | 0.6381999850273132 |
10 | مرسيليا | 0.6370999813079834 |
東京 - 日本 + フランス = パリ ?
رمز روبي:
require "ruby-spacy"
require "terminal-table"
nlp = Spacy :: Language . new ( "ja_core_news_lg" )
tokyo = nlp . get_lexeme ( "東京" )
japan = nlp . get_lexeme ( "日本" )
france = nlp . get_lexeme ( "フランス" )
query = tokyo . vector - japan . vector + france . vector
headings = [ "rank" , "text" , "score" ]
rows = [ ]
results = nlp . most_similar ( query , 10 )
results . each_with_index do | lexeme , i |
index = ( i + 1 ) . to_s
rows << [ index , lexeme . text , lexeme . score ]
end
table = Terminal :: Table . new rows : rows , headings : headings
puts table
الإخراج:
رتبة | نص | نتيجة |
---|---|---|
1 | パリ | 0.7376999855041504 |
2 | フランス | 0.7221999764442444 |
3 | جديد | 0.6697999835014343 |
4 | ス ト ラ ス ブ ー ル | 0.631600022315979 |
5 | リヨン | 0.5939000248908997 |
6 | باريس | 0.574400007724762 |
7 | ベ ル ギ ・ | 0.5683000087738037 |
8 | ニ ス | 0.5679000020027161 |
9 | アルザス | 0.5644999742507935 |
10 | شكرا | 0.5547999739646912 |
️ هذه الميزة تجريبية حاليًا. التفاصيل قابلة للتغيير. يرجى الرجوع إلى مرجع واجهة برمجة التطبيقات الخاصة بـ OpenAI وRuby OpenAI للتعرف على المعلمات المتاحة (max_tokens
،temperature
، وما إلى ذلك).
يمكنك الاستفادة بسهولة من نماذج GPT ضمن مساحة Ruby-Spacy باستخدام مفتاح OpenAI API. عند إنشاء مطالبات للأسلوب Doc::openai_query
، يمكنك دمج خصائص الرمز المميز التالية للمستند. يتم استرداد هذه الخصائص من خلال استدعاءات الوظائف (التي يتم إجراؤها داخليًا بواسطة GPT عند الضرورة) ويتم دمجها بسلاسة في الموجه الخاص بك. لاحظ أن استدعاءات الوظائف تحتاج إلى gpt-4o-mini
أو أكبر. تشمل الخصائص المتاحة ما يلي:
surface
lemma
tag
pos
(جزء من الكلام)dep
(التبعية)ent_type
(نوع الكيان)morphology
رمز روبي:
require "ruby-spacy"
api_key = ENV [ "OPENAI_API_KEY" ]
nlp = Spacy :: Language . new ( "en_core_web_sm" )
doc = nlp . read ( "The Beatles released 12 studio albums" )
# default parameter values
# max_tokens: 1000
# temperature: 0.7
# model: "gpt-4o-mini"
res1 = doc . openai_query (
access_token : api_key ,
prompt : "Translate the text to Japanese."
)
puts res1
الإخراج:
تم تصميمه بواسطة 12 شخصًا.
رمز روبي:
require "ruby-spacy"
api_key = ENV [ "OPENAI_API_KEY" ]
nlp = Spacy