roshan-research / hazm

Persian NLP Toolkit
https://www.roshan-ai.ir/hazm/
MIT License
1.19k stars 180 forks source link

Issue with SpacyPOStagger #326

Closed SoshyHayami closed 6 months ago

SoshyHayami commented 6 months ago

سلام و عرض ادب. خسته نباشین

من هرکاری کردم نتونستم از SpacyPOStagger استفاده کنم. انگار نمیتونه اسپیسی رو پیدا کنه. (با اینکه نصب دارمش) حتی داخل کد سعی کردم ایمپورتشو درست کنم ولی بازم نشد.

میشه راهنمایی کنین که کجا رو دارم اشتباه عمل میکنم؟


------------- You Prefer to use CPU --------------

---------------------------------------------------------------------------

NameError                                 Traceback (most recent call last)

[<ipython-input-13-6f1eeecccf82>](https://localhost:8080/#) in <cell line: 4>()
      2 
      3 spacy_posTagger = SpacyPOSTagger(model_path = 'roshan-research/spacy_pos_tagger_parsbertpostagger')
----> 4 spacy_posTagger.tag(tokens = ['من', 'به', 'مدرسه', 'ایران', 'رفته_بودم', '.'])

1 frames

[/usr/local/lib/python3.10/dist-packages/hazm/pos_tagger.py](https://localhost:8080/#) in tag(self, tokens, universal_tag)
    378         """
    379         if self.tagger == None:
--> 380             self._setup_model([tokens])
    381         self._add_to_dict([tokens])
    382 

[/usr/local/lib/python3.10/dist-packages/hazm/pos_tagger.py](https://localhost:8080/#) in _setup_model(self, sents)
    258         """
    259         self.peykare_dict = {}  # Initialize a dictionary for reference
--> 260         self.tagger = spacy.load(self.model_path)  # Load the spaCy model
    261         self._set_peykare_dictionary(sents)  # Construct a reference dictionary
    262         self.tagger.tokenizer = self._custom_tokenizer  # Set a custom tokenizer for the model.

NameError: name 'spacy' is not defined
SoshyHayami commented 6 months ago

به نظر میاد درستش کردم. باید اول از همه ایمپورت ها رو ببریم بیرون از کلاس و توابع. بعد نیازه spacy-transformers و cupy (برای جی پی یو اکسلریشن) نصب بشه. در نهایت تابع tag رو هم یه تغییر جزئی باید بدیم تا لیستی از توکن ها رو قبول کنه.

    if self.tagger is None:
        self._setup_model([tokens])
    self._add_to_dict([tokens])

    text = ' '.join(tokens)
    doc = self.tagger(text)

    if not universal_tag:
        tags = [tok.tag_ for tok in doc]
    else:

        tags = [tok.tag_.replace(',EZ', '') for tok in doc]

    return list(zip(tokens, tags))