2015-08-05 2 views
2

NLTK позволяет мне устранять неоднозначность текста с помощью nltk.wsd.lesk, например.Словосочетание Несознание для текста на арабском языке с помощью NLTK

>>> from nltk.corpus import wordnet as wn 
>>> from nltk.wsd import lesk 
>>> sent = "I went to the bank to deposit money" 
>>> ambiguous = "deposit" 
>>> lesk(sent, ambiguous, pos='v') 
Synset('deposit.v.02') 

PyWSD делает то же самое, но это только для текста на английском языке.


NLTK поддерживает арабский WordNet из Open Multilingual WordNet, например

>>> wn.synsets('deposit', pos='v')[1].lemma_names(lang='arb') 
[u'\u0623\u064e\u0648\u0652\u062f\u064e\u0639\u064e'] 
>>> print wn.synsets('deposit', pos='v')[1].lemma_names(lang='arb')[0] 
أَوْدَعَ 

Кроме того, synsets индексируются на арабском языке:

>>> wn.synsets(u'أَوْدَعَ', lang='arb') 
[Synset('entrust.v.02'), Synset('deposit.v.02'), Synset('commit.v.03'), Synset('entrust.v.01'), Synset('consign.v.02')] 

Но как я мог неоднозначность арабские тексты и концепции извлечения из запроса с использованием NLTK?

Мне было интересно, можно ли использовать алгоритм Леска для обработки арабских текстов через nltk?

ответ

2

Это немного сложнее, но, возможно, это будет работать:

  1. Перевести фразу и неоднозначное слово
  2. Использование Lesk на английской версии предложения

Try:

[email protected]:~$ wget -O translate.sh http://pastebin.com/raw.php?i=aHgFzmMU 
--2015-08-05 23:32:46-- http://pastebin.com/raw.php?i=aHgFzmMU 
Resolving pastebin.com (pastebin.com)... 190.93.241.15, 190.93.240.15, 141.101.112.16, ... 
Connecting to pastebin.com (pastebin.com)|190.93.241.15|:80... connected. 
HTTP request sent, awaiting response... 200 OK 
Length: unspecified [text/plain] 
Saving to: ‘translate.sh’ 

    [ <=>                               ] 212   --.-K/s in 0s  

2015-08-05 23:32:47 (9.99 MB/s) - ‘translate.sh’ saved [212] 

[email protected]:~$ python 
Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
[GCC 4.8.2] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import os 
>>> import nltk 
>>> from nltk.corpus import wordnet as wn 
>>> text = 'لديه يودع المال في البنك' 
>>> cmd = 'echo "{}" | bash translate.sh'.format(text) 
>>> translation = os.popen(cmd).read() 
    % Total % Received % Xferd Average Speed Time Time  Time Current 
           Dload Upload Total Spent Left Speed 
100 193 0 40 100 153  21  83 0:00:01 0:00:01 --:--:-- 83 
>>> translation 
'He has deposited the money in the bank. ' 
>>> ambiguous = u'أَوْدَعَ' 
>>> wn.synsets(ambiguous, lang='arb') 
[Synset('entrust.v.02'), Synset('deposit.v.02'), Synset('commit.v.03'), Synset('entrust.v.01'), Synset('consign.v.02')] 
>>> nltk.wsd.lesk(translation_stems, '', synsets=wn.synsets(ambiguous,lang='arb')) 
Synset('entrust.v.02') 

Но, как вы можете видеть, существует множество ограничений:

  • Доступ к системе MT не всегда легко (выше Баш скрипт с помощью IBM API, который не будет длиться вечно, оно пришло из https://github.com/Rich-Edwards/fsharpwatson/blob/master/Command%20Line%20CURL%20Scripts)
  • Машинный перевод никогда не будет 100% точным
  • Поиск правильная лемма в Open Multilingual WordNet не так проста, как показано в примере, там есть перегиб и другие морфемные варианты стебля.
  • WordNet никогда не будет завершен, особенно если это не английский.
  • WSD не 100%, как и ожидалось человеком (даже между людьми мы изменяем наши «чувства», в приведенном выше примере, некоторые могут сказать, что WSD является правильным, некоторые говорят, что лучше использовать Synset('deposit.v.02'))
+0

Здравствуйте ALVAS , мне нужно знать от вас, если над переводом api все еще работает, или еще что-нибудь, что вы можете порекомендовать –