예제 #1
0
def _add_signifs_effect_action(name_act,
                               full_name_obj,
                               add_name_act,
                               actions_sign={},
                               role_sign={},
                               obj_sign={},
                               char_sign={},
                               signifs={}):
    """
    The function has to add events into effect of action 'name_act'
    
    The input of function:
        name_act (string)
            Name of action. Invinitive of corresponding verb
        full_name_obj (string)
            Name of object.
        add_name_act (string)
            The form of action from text. It is used for constructing participle
        S (Sign)
            the Sign of Script
        actions_sign (dict)
            the dictionary with values are signs of actions and keys are their
            names
        obj_sign (dict)
            the dictionary with values are signs of placeholders and keys are their
            names        
        char_sign (dict)
            the dictionary with values are signs of characteristics and keys are their
            names        
        role_sign (dict)
            the dictionary with values are roles of characteristics and keys are their
            names        
        signifs (dict)
            the dictionary with values are causal matrices of significances and keys are their
            names
    """
    try:
        morph = pymorphy2.MorphAnalyzer()
        char_name = morph.parse(add_name_act)[0].inflect(
            {'PRTF', 'perf', 'pssv', 'past'}).word
    except Exception:
        char_name = name_act + "_PRTF_pssv_past_perf"

    pred_name = "{not}" + char_name + "(" + full_name_obj + ")" + "[amod]"
    if not pred_name in role_sign:
        role_sign[pred_name] = Sign(pred_name)
    pred_sign = role_sign[pred_name]

    signifs[pred_name] = pred_sign.add_significance()

    # action -> predicat
    connector = signifs[name_act].add_feature(signifs[pred_name],
                                              zero_out=True,
                                              effect=False)
    pred_sign.add_out_significance(connector)

    if not full_name_obj in obj_sign:
        obj_sign[full_name_obj] = Sign(full_name_obj)
        signifs[full_name_obj] = obj_sign[full_name_obj].add_significance()
    connector = signifs[pred_name].add_feature(signifs[full_name_obj],
                                               zero_out=True)
    obj_sign[full_name_obj].add_out_significance(connector)

    try:
        morph = pymorphy2.MorphAnalyzer()
        char_name = morph.parse(add_name_act)[0].inflect(
            {'PRTF', 'perf', 'pssv', 'past'}).word
    except Exception:
        char_name = name_act + "_PRTF_pssv_past_perf"
    if not char_name in char_sign:
        char_sign[char_name] = Sign(char_name)
        signifs[char_name] = char_sign[char_name].add_significance()
    connector = signifs[pred_name].add_feature(signifs[char_name],
                                               zero_out=True)
    char_sign[char_name].add_out_significance(connector)

    pred_name = char_name + "(" + full_name_obj + ")" + "[amod]"
    if not pred_name in role_sign:
        role_sign[pred_name] = Sign(pred_name)
    pred_sign = role_sign[pred_name]

    signifs[pred_name] = pred_sign.add_significance()

    # action -> predicat
    connector = signifs[name_act].add_feature(signifs[pred_name],
                                              zero_out=True,
                                              effect=True)
    pred_sign.add_out_significance(connector)

    if not full_name_obj in obj_sign:
        obj_sign[full_name_obj] = Sign(full_name_obj)
        signifs[full_name_obj] = obj_sign[full_name_obj].add_significance()
    connector = signifs[pred_name].add_feature(signifs[full_name_obj],
                                               zero_out=True)
    obj_sign[full_name_obj].add_out_significance(connector)

    try:
        morph = pymorphy2.MorphAnalyzer()
        char_name = morph.parse(add_name_act)[0].inflect(
            {'PRTF', 'perf', 'pssv', 'past'}).word
    except Exception:
        char_name = name_act + "_PRTF_pssv_past_perf"
    if not char_name in char_sign:
        char_sign[char_name] = Sign(char_name)
        signifs[char_name] = char_sign[char_name].add_significance()
    connector = signifs[pred_name].add_feature(signifs[char_name],
                                               zero_out=True)
    char_sign[char_name].add_out_significance(connector)
예제 #2
0
def start_game():
    running = True
    pygame.mouse.set_visible(False)

    morph = pymorphy2.MorphAnalyzer()
    day = morph.parse('день')[0]

    bg = pygame.transform.scale(load_image('bg.jpg'), (width, height))
    bear = pygame.transform.scale(load_image('bear.png'), bear_size)
    screen.blit(bg, (0, 0))
    screen.blit(bear, (width / 2, height / 2))
    pygame.draw.rect(screen, HEAD_COLOR, (0, 0, width, 0.2 * height))
    cursor = pygame.transform.scale(load_image('weapon.png'), cursor_size)

    dark_progress_line_cf = 1
    noise = 0
    step = 10
    day_number = 1
    all_fly_count = 0
    over_full = 0
    cool_down = 1000

    bear_delta_x, bear_delta_y = 185, 100
    weapon_delta_x, weapon_delta_y = 135, 100

    flies = []

    FLY_EVENT = 30
    pygame.time.set_timer(FLY_EVENT, cool_down)

    font = pygame.font.Font(FONT, 35)
    line = f"МЕДВЕДЬ СПИТ {day_number} {day.make_agree_with_number(day_number).word.upper()}"
    string_rendered = font.render(line, 6, pygame.Color('black'))

    screen.blit(string_rendered, (width / 2, height / 2))

    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                terminate()
            if event.type == FLY_EVENT:
                vector = random.choice(['right', 'left'])
                if vector == 'right':
                    fly_pos = [
                        random.randint(0, width // 2),
                        random.randint(height * 0.8, height)
                    ]
                else:
                    fly_pos = [
                        random.randint(width // 2, width),
                        random.randint(height * 0.8, height)
                    ]
                flies.append(Fly(fly_pos, 60, 60, vector))
            if event.type == pygame.MOUSEBUTTONDOWN:
                if event.button == 1:
                    cursor_pos = pygame.mouse.get_pos()
                    for fly in flies:
                        if cursor_pos[0] <= fly.pos[0] <= cursor_pos[0] + weapon_delta_x and \
                                cursor_pos[1] <= fly.pos[1] <= cursor_pos[1] + weapon_delta_y:
                            flies.remove(fly)

                    # noise += step
                    # day_number += 1
                    #
                    # dark_progress_line_cf -= 0.1
                    # if dark_progress_line_cf < 0:
                    #     dark_progress_line_cf = 0
                    #
                    # line = change_day_text(day, day_number)
                    # string_rendered = font.render(line, 6, pygame.Color('black'))

        keys = pygame.key.get_pressed()
        if keys[pygame.K_ESCAPE]:
            terminate()

        if pygame.mouse.get_focused():
            pos = pygame.mouse.get_pos()
            screen.blit(cursor, pos)

        pygame.display.flip()
        screen.blit(bg, (0, 0))
        screen.blit(bear, (width / 2, height / 2))

        for fly in flies:
            fly.move(screen)
            if fly.pos[0] > width + fly.width or fly.pos[0] < -fly.width:
                flies.remove(fly)

        pygame.draw.rect(screen, HEAD_COLOR, (0, 0, width, 0.185 * height))
        pygame.draw.rect(screen, PROGRESS_LINE_LIGHT,
                         (1250, 0.125 * height, full_progress_line_size[0],
                          full_progress_line_size[1]))
        pygame.draw.rect(screen, PROGRESS_LINE_DARK,
                         (1250, 0.125 * height, full_progress_line_size[0] *
                          dark_progress_line_cf, full_progress_line_size[1]))
        screen.blit(string_rendered, (0.4 * width, 0.13 * height))
        clock.tick(FPS)
예제 #3
0
 def get_instance(cls):
     if not cls.__instance:
         cls.__instance = pymorphy2.MorphAnalyzer()
     return cls.__instance
예제 #4
0
    def __init__(self):
        self._morph_analyzer = pymorphy2.MorphAnalyzer()

        self._stop_words = self._read_stop_words()
        self._parts_of_speech_to_remove = ['NUMR', 'NPRO', 'PREP']
예제 #5
0
def meta_tag(page_type, tag, object, request, category=None, filter=None):
    # Return ModelMetaTag if exists
    if isinstance(object, Product) or isinstance(object, Category):
        model_meta_tag = ModelMetaTag.objects.filter(
            content_type=ContentType.objects.get_for_model(object),
            object_id=object.id,
        )
        if model_meta_tag.exists():
            tag = getattr(model_meta_tag[0], tag)
            return tag

    # else return tag from tokens
    morph = pymorphy2.MorphAnalyzer(lang=get_language())
    meta_tags = MetaTag.objects.get(type=page_type)
    tag = getattr(meta_tags, tag)
    tokens = get_tokens(tag)
    for k in tokens:
        value = object
        for token in k:
            token_clean = token.replace('[', '').replace(']', '')
            if token_clean in OpencorporaTag.CASES:
                try:
                    word = morph.parse(unicode(value))[0]
                    value = word.inflect({token_clean}).word
                except AttributeError:
                    value = value
            elif token_clean == 'filter':
                value = ''
                for item in filter:
                    filter_values = ', '.join([m for m in filter[item]])
                    value += u' {}: {};'.format(item, filter_values)
            elif token_clean == 'category' and category is not None:
                value = category.name
            elif token_clean == 'site_name':
                current_site = get_current_site(request)
                value = current_site.name
            elif token_clean == 'site_domain':
                current_site = get_current_site(request)
                value = current_site.domain
            elif (page_type == MetaTag.PRODUCT and
                    (token_clean == 'price' or
                        token_clean == 'availability')):
                selector = Selector()
                strategy = selector.strategy()
                purchase_info = strategy.fetch_for_product(object)
                if token_clean == 'price':
                    value = unicode(purchase_info.price.incl_tax)
                elif token_clean == 'availability':
                    value = unicode(purchase_info.availability.message)
            else:
                if (token_clean == 'name' and
                    (page_type == MetaTag.BRAND or
                        page_type == MetaTag.BRAND_FILTER)):
                    token_clean = 'option'
                try:
                    value = getattr(value, token_clean)
                except AttributeError:
                    value = ''
        tag = tag.replace(''.join(k), value)
    if tag[0:2] == ' .':
        tag = tag[2:]
    tag = tag.replace(' . ', '. ')
    return tag
예제 #6
0
def lemmatize_word(word):
    p = pymorphy2.MorphAnalyzer().parse(word)
    return max(p, key=lambda x: x.score).normal_form if p else word
예제 #7
0
    def __init__(
        self,
        load_path: str,
        inverted_index_filename: str,
        entities_list_filename: str,
        q2name_filename: str,
        types_dict_filename: Optional[str] = None,
        who_entities_filename: Optional[str] = None,
        save_path: str = None,
        q2descr_filename: str = None,
        descr_rank_score_thres: float = 0.5,
        freq_dict_filename: Optional[str] = None,
        entity_ranker: RelRankerInfer = None,
        build_inverted_index: bool = False,
        kb_format: str = "hdt",
        kb_filename: str = None,
        label_rel: str = None,
        descr_rel: str = None,
        aliases_rels: List[str] = None,
        sql_table_name: str = None,
        sql_column_names: List[str] = None,
        lang: str = "en",
        use_descriptions: bool = False,
        include_mention: bool = False,
        num_entities_to_return: int = 5,
        num_entities_for_bert_ranking: int = 100,
        lemmatize: bool = False,
        use_prefix_tree: bool = False,
        **kwargs,
    ) -> None:
        """

        Args:
            load_path: path to folder with inverted index files
            inverted_index_filename: file with dict of words (keys) and entities containing these words
            entities_list_filename: file with the list of entities from the knowledge base
            q2name_filename: file which maps entity id to name
            types_dict_filename: file with types of entities
            who_entities_filename: file with the list of entities in Wikidata, which can be answers to questions
                with "Who" pronoun, i.e. humans, literary characters etc.
            save_path: path where to save inverted index files
            q2descr_filename: name of file which maps entity id to description
            descr_rank_score_thres: if the score of the entity description is less than threshold, the entity is not
                added to output list
            freq_dict_filename: filename with frequences dictionary of Russian words
            entity_ranker: component deeppavlov.models.kbqa.rel_ranker_infer
            build_inverted_index: if "true", inverted index of entities of the KB will be built
            kb_format: "hdt" or "sqlite3"
            kb_filename: file with the knowledge base, which will be used for building of inverted index
            label_rel: relation in the knowledge base which connects entity ids and entity titles
            descr_rel: relation in the knowledge base which connects entity ids and entity descriptions
            aliases_rels: list of relations which connect entity ids and entity aliases
            sql_table_name: name of the table with the KB if the KB is in sqlite3 format
            sql_column_names: names of columns with subject, relation and object
            lang: language used
            use_descriptions: whether to use context and descriptions of entities for entity ranking
            include_mention: whether to leave or delete entity mention from the sentence before passing to BERT ranker
            num_entities_to_return: how many entities for each substring the system returns
            lemmatize: whether to lemmatize tokens of extracted entity
            use_prefix_tree: whether to use prefix tree for search of entities with typos in entity labels
            **kwargs:
        """
        super().__init__(save_path=save_path, load_path=load_path)
        self.morph = pymorphy2.MorphAnalyzer()
        self.lemmatize = lemmatize
        self.use_prefix_tree = use_prefix_tree
        self.inverted_index_filename = inverted_index_filename
        self.entities_list_filename = entities_list_filename
        self.build_inverted_index = build_inverted_index
        self.q2name_filename = q2name_filename
        self.types_dict_filename = types_dict_filename
        self.who_entities_filename = who_entities_filename
        self.q2descr_filename = q2descr_filename
        self.descr_rank_score_thres = descr_rank_score_thres
        self.freq_dict_filename = freq_dict_filename
        self.kb_format = kb_format
        self.kb_filename = kb_filename
        self.label_rel = label_rel
        self.aliases_rels = aliases_rels
        self.descr_rel = descr_rel
        self.sql_table_name = sql_table_name
        self.sql_column_names = sql_column_names
        self.inverted_index: Optional[Dict[str, List[Tuple[str]]]] = None
        self.entities_index: Optional[List[str]] = None
        self.q2name: Optional[List[Tuple[str]]] = None
        self.types_dict: Optional[Dict[str, List[str]]] = None
        self.lang_str = f"@{lang}"
        if self.lang_str == "@en":
            self.stopwords = set(stopwords.words("english"))
        elif self.lang_str == "@ru":
            self.stopwords = set(stopwords.words("russian"))
        self.re_tokenizer = re.compile(r"[\w']+|[^\w ]")
        self.entity_ranker = entity_ranker
        self.nlp = en_core_web_sm.load()
        self.inflect_engine = inflect.engine()
        self.use_descriptions = use_descriptions
        self.include_mention = include_mention
        self.num_entities_to_return = num_entities_to_return
        self.num_entities_for_bert_ranking = num_entities_for_bert_ranking
        self.black_list_what_is = {
            "Q277759",  # book series
            "Q11424",  # film
            "Q7889",  # video game
            "Q2743",  # musical theatre
            "Q5398426",  # tv series
            "Q506240",  # television film
            "Q21191270",  # television series episode
            "Q7725634",  # literary work
            "Q131436",  # board game
            "Q1783817",  # cooperative board game
        }
        if self.use_descriptions and self.entity_ranker is None:
            raise ValueError("No entity ranker is provided!")

        if self.use_prefix_tree:
            alphabet = (
                r"!#%\&'()+,-./0123456789:;?ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz½¿ÁÄ"
                +
                "ÅÆÇÉÎÓÖ×ÚßàáâãäåæçèéêëíîïðñòóôöøùúûüýāăąćČčĐėęěĞğĩīİıŁłńňŌōőřŚśşŠšťũūůŵźŻżŽžơưșȚțəʻ"
                + "ʿΠΡβγБМавдежикмностъяḤḥṇṬṭầếờợ–‘’Ⅲ−∗")
            dictionary_words = list(self.inverted_index.keys())
            self.searcher = LevenshteinSearcher(alphabet, dictionary_words)

        if self.build_inverted_index:
            if self.kb_format == "hdt":
                self.doc = HDTDocument(str(expand_path(self.kb_filename)))
            elif self.kb_format == "sqlite3":
                self.conn = sqlite3.connect(str(expand_path(self.kb_filename)))
                self.cursor = self.conn.cursor()
            else:
                raise ValueError(
                    f"unsupported kb_format value {self.kb_format}")
            self.inverted_index_builder()
            self.save()
        else:
            self.load()
예제 #8
0
    def out_stop_words(text):
        from nltk.corpus import stopwords
        stopwords = stopwords.words("russian")
        ukrainian_stopwords = [
            "&nbsp", "&nbsp;", "nbsp", 'а', 'аби', 'абиде', 'абиким',
            'абикого', 'абиколи', 'абикому', 'абикуди', 'абихто', 'абичий',
            'абичийого', 'абичийому', 'абичим', 'абичию', 'абичия', 'абичиє',
            'абичиєму', 'абичиєю', 'абичиєї', 'абичиї', 'абичиїй', 'абичиїм',
            'абичиїми', 'абичиїх', 'абичого', 'абичому', 'абищо', 'абияка',
            'абияке', 'абиякий', 'абияким', 'абиякими', 'абияких', 'абиякого',
            'абиякому', 'абиякою', 'абиякої', 'абияку', 'абиякі', 'абиякій',
            'абиякім', 'або', 'абощо', 'авжеж', 'авось', 'ага', 'ад', 'адже',
            'аж', 'ажень', 'аз', 'ай', 'але', 'ало', 'амінь', 'ант', 'ану',
            'ані', 'аніде', 'аніж', 'анізащо', 'аніким', 'анікого',
            'анікогісінько', 'аніколи', 'анікому', 'аніскільки', 'аніхто',
            'анічим', 'анічого', 'анічогісінько', 'анічому', 'аніщо', 'аніяка',
            'аніяке', 'аніякий', 'аніяким', 'аніякими', 'аніяких', 'аніякого',
            'аніякому', 'аніякою', 'аніякої', 'аніяку', 'аніякі', 'аніякій',
            'аніякім', 'аніякісенька', 'аніякісеньке', 'аніякісенький',
            'аніякісеньким', 'аніякісенькими', 'аніякісеньких',
            'аніякісенького', 'аніякісенькому', 'аніякісенькою',
            'аніякісенької', 'аніякісеньку', 'аніякісенькі', 'аніякісенькій',
            'аніякісенькім', 'аніякісінька', 'аніякісіньке', 'аніякісінький',
            'аніякісіньким', 'аніякісінькими', 'аніякісіньких',
            'аніякісінького', 'аніякісінькому', 'аніякісінькою',
            'аніякісінької', 'аніякісіньку', 'аніякісінькі', 'аніякісінькій',
            'аніякісінькім', 'ат', 'ато', 'атож', 'ау', 'ах', 'ач', 'ачей',
            'аякже', 'б', 'ба', 'багато', 'багатьма', 'багатьом', 'багатьох',
            'баз', 'бай', 'бат', 'бах', 'бац', 'баш', 'бе', 'беж', 'без',
            'безперервно', 'бел', 'бер', 'би', 'бир', 'бич', 'близько',
            'близько від', 'бо', 'бов', 'бод', 'бодай', 'боз', 'бош', 'був',
            'буває', 'буде', 'будем', 'будемо', 'будете', 'будеш', 'буду',
            'будуть', 'будь', 'будь ласка', 'будьмо', 'будьте', 'була', 'були',
            'було', 'бути', 'бух', 'буц', 'буцім', 'буцімто', 'бі', 'біб',
            'більш', 'більше', 'біля', 'в', 'в бік', 'в залежності від',
            'в міру', 'в напрямі до', 'в порівнянні з', 'в процесі',
            'в результаті', 'в ролі', 'в силу', 'в сторону', 'в супроводі',
            'в ході', "в ім'я", 'в інтересах', 'вад', 'важлива', 'важливе',
            'важливий', 'важливі', 'вак', 'вам', 'вами', 'ван', 'вас', 'ват',
            'ваш', 'ваша', 'ваше', 'вашим', 'вашими', 'ваших', 'вашого',
            'вашому', 'вашою', 'вашої', 'вашу', 'ваші', 'вашій', 'вашім',
            'ввесь', 'вві', 'вгору', 'вдалині', 'вед', 'верх', 'весь', 'вех',
            'вже', 'вздовж', 'ви', 'виз', 'вис', 'височині', 'вище ', 'вйо',
            'власне', 'властиво', 'вміти', 'внаслідок', 'вниз', 'внизу', 'во',
            'вон', 'вона', 'вони', 'воно', 'восьмий', 'вперед', 'вподовж',
            'впоперек', 'впритиск', 'впритул', 'впродовж', 'впрост', 'все',
            'всередині', 'всею', 'вслід', 'всупереч', 'всього', 'всьому',
            'всю', 'всюди', 'вся', 'всяк', 'всяка', 'всяке', 'всякий',
            'всяким', 'всякими', 'всяких', 'всякого', 'всякому', 'всякою',
            'всякої', 'всяку', 'всякі', 'всякій', 'всякім', 'всі', 'всій',
            'всіляка', 'всіляке', 'всілякий', 'всіляким', 'всілякими',
            'всіляких', 'всілякого', 'всілякому', 'всілякою', 'всілякої',
            'всіляку', 'всілякі', 'всілякій', 'всілякім', 'всім', 'всіма',
            'всіх', 'всією', 'всієї', 'втім', 'ві', 'віг', 'від', 'від імені',
            'віддалік від', 'відколи', 'відносно', 'відповідно',
            'відповідно до', 'відсотків', 'відтепер', 'відтоді', 'він',
            'вісім', 'вісімнадцятий', 'вісімнадцять', 'віт', 'віф', 'віх',
            'віц', 'віщо', 'віщось', 'г', 'га', 'гав', 'гаразд', 'ге', 'гез',
            'гем', 'геп', 'гет', 'геть', 'гех', 'ги', 'гик', 'гир', 'гич',
            'гм', 'го', 'говорив', 'гог', 'гоп', 'гоц', 'гу', 'гуп', 'д', 'да',
            'давай', 'давати', 'давно', 'далеко', 'далеко від', 'далі',
            'даром', 'два', 'двадцятий', 'двадцять', 'дванадцятий',
            'дванадцять', 'двох', 'дві', 'де', "дев'ятий", "дев'ятнадцятий",
            "дев'ятнадцять", "дев'ять", 'дедалі', 'деким', 'декого', 'деколи',
            'декому', 'декотра', 'декотре', 'декотрий', 'декотрим',
            'декотрими', 'декотрих', 'декотрого', 'декотрому', 'декотрою',
            'декотрої', 'декотру', 'декотрі', 'декотрій', 'декотрім',
            'декілька', 'декільком', 'декількома', 'декількох', 'декім',
            'десь', 'десятий', 'десять', 'дехто', 'дечий', 'дечийого',
            'дечийому', 'дечим', 'дечию', 'дечия', 'дечиє', 'дечиєму',
            'дечиєю', 'дечиєї', 'дечиї', 'дечиїй', 'дечиїм', 'дечиїми',
            'дечиїх', 'дечого', 'дечому', 'дечім', 'дещо', 'деяка', 'деяке',
            'деякий', 'деяким', 'деякими', 'деяких', 'деякого', 'деякому',
            'деякою', 'деякої', 'деяку', 'деякі', 'деякій', 'деякім', 'деінде',
            'для', 'до', 'добре', 'довго', 'довкола', 'довкіл', 'дог', 'доки',
            'допоки', 'допіру', 'досить', 'досі', 'дотепер', 'доти', 'другий',
            'друго', 'дуже', 'дякую', 'дійсно', 'діл', 'е', 'еге', 'еж', 'ей',
            'ерг', 'ест', 'ет', 'ех', 'еч', 'ж', 'же', 'жоден', 'жодна',
            'жодне', 'жодний', 'жодним', 'жодними', 'жодних', 'жодного',
            'жодному', 'жодною', 'жодної', 'жодну', 'жодні', 'жодній',
            'жоднім', 'жоднісінька', 'жоднісіньке', 'жоднісінький',
            'жоднісіньким', 'жоднісінькими', 'жоднісіньких', 'жоднісінького',
            'жоднісінькому', 'жоднісінькою', 'жоднісінької', 'жоднісіньку',
            'жоднісінькі', 'жоднісінькій', 'жоднісінькім', 'жуз', 'з',
            'з метою', 'з нагоди', 'з приводу', 'з розрахунку на', 'з-за',
            'з-над', 'з-перед', 'з-поза', 'з-поміж', 'з-понад', 'з-поперед',
            'з-посеред', 'з-проміж', 'з-під', 'з-серед', 'за', 'за винятком',
            'за допомогою', 'за посередництвом', 'за рахунок', 'завгодно',
            'завдяки', 'завжди', 'завше', 'задля', 'зазвичай', 'зайнята',
            'зайнятий', 'зайнято', 'зайняті', 'залежно', 'залежно від',
            'замість', 'занадто', 'заради', 'зараз', 'зас', 'зате', 'збоку',
            'збоку від', 'зважаючи на', 'зверх ', 'зверху', 'звичайно', 'звиш',
            'звідки', 'звідкилясь', 'звідкись', 'звідкіль', 'звідкіля',
            'звідкілясь', 'звідси', 'звідсіль', 'звідсіля', 'звідти',
            'звідтіль', 'звідтіля', 'звідусюди', 'звідусіль', 'звідціля',
            'згідно з', 'здається', 'здовж', 'зем', 'зет', 'ззаду', 'зиз',
            'зик', 'значить', 'знову', 'зо', 'зовсім', 'зсередини', 'зух',
            'зі', 'зіс', 'и', 'ич', 'й', 'ймовірно', 'йно', 'йо', 'його',
            'йой', 'йол', 'йому', 'йор', 'йот', 'йох', 'к', 'каже', 'каз',
            'кар', 'каф', 'ках', 'ке', 'кед', 'кет', 'кеш', 'кив', 'кий',
            'кил', 'ким', 'кимось', 'кимсь', 'ких', 'киш', 'коб', 'коби',
            'кого', 'когось', 'кожен', 'кожна', 'кожне', 'кожний', 'кожним',
            'кожними', 'кожних', 'кожного', 'кожному', 'кожною', 'кожної',
            'кожну', 'кожні', 'кожній', 'кожнім', 'кожнісінька', 'кожнісіньке',
            'кожнісінький', 'кожнісіньким', 'кожнісінькими', 'кожнісіньких',
            'кожнісінького', 'кожнісінькому', 'кожнісінькою', 'кожнісінької',
            'кожнісіньку', 'кожнісінькі', 'кожнісінькій', 'кожнісінькім',
            'коли', 'колись', 'коло', 'кому', 'комусь', 'котра', 'котрась',
            'котре', 'котресь', 'котрий', 'котрийсь', 'котрим', 'котрими',
            'котримись', 'котримось', 'котримсь', 'котрих', 'котрихось',
            'котрихсь', 'котрого', 'котрогось', 'котрому', 'котромусь',
            'котрою', 'котроюсь', 'котрої', 'котроїсь', 'котру', 'котрусь',
            'котрі', 'котрій', 'котрійсь', 'котрім', 'котрімсь', 'котрісь',
            'коц', 'коч', 'коштом', 'край', 'краще', 'кру', 'круг', 'кругом',
            'крю', 'кря', 'крізь', 'крім', 'куди', 'кудись', 'кудою', 'кілька',
            'кільком', 'кількома', 'кількох', 'кім', 'кімось', 'кімсь',
            'кінець', 'л', 'лаж', 'лап', 'лас', 'лат', 'ле', 'ледве', 'ледь',
            'лет', 'лиш', 'лише', 'лишень', 'лум', 'луп', 'лут', 'льє', 'люди',
            'людина', 'ля', 'лі', 'ліворуч від', 'лік', 'лім', 'м', 'мабуть',
            'майже', 'мало', 'мати', 'мац', 'ме', 'меж', 'мене', 'менше',
            'мені', 'мерсі', 'мет', 'мжа', 'ми', 'мимо ', 'миру', 'мит',
            'мною', 'мо', 'мов', 'мовби', 'мовбито', 'могла', 'могли', 'могло',
            'мого', 'могти', 'мож', 'може', 'можем', 'можемо', 'можете',
            'можеш', 'можна', 'можу', 'можуть', 'можіть', 'мой', 'мол', 'мою',
            'моя', 'моє', 'моєму', 'моєю', 'моєї', 'мої', 'моїй', 'моїм',
            'моїми', 'моїх', 'му', 'мі', 'міг', 'між', 'мій', 'мільйонів', 'н',
            'на', 'на адресу', 'на базі', 'на благо', 'на випадок',
            'на відміну від', 'на засадах', 'на знак', 'на зразок',
            'на користь', 'на кшталт', 'на межі', 'на основі', 'на противагу',
            'на підставі', 'на честь', 'на чолі', 'на ґрунті', 'навколо',
            'навкруг', 'навкруги ', 'навкіл', 'навпаки', 'навперейми',
            'навпроти', 'навіть', 'навіщо', 'навіщось', 'нагорі', 'над',
            'надо', 'надовкола', 'надокола', 'наді', 'назавжди', 'назад',
            'назустріч', 'най', 'найбільш', 'нам', 'нами', 'наоколо ',
            'наокруг ', 'наокруги ', 'наокіл', 'наперед', 'напередодні',
            'напереді', 'наперекір', 'напереріз', 'наприкінці', 'напроти',
            'нарешті', 'нарівні з', 'нас', 'насеред', 'насподі', 'наспід',
            'настрічу', 'насупроти', 'насупротив ', 'нате', 'наче', 'начеб',
            'начебто', 'наш', 'наша', 'наше', 'нашим', 'нашими', 'наших',
            'нашого', 'нашому', 'нашою', 'нашої', 'нашу', 'наші', 'нашій',
            'нашім', 'не', 'не до', 'не можна', 'неабичим', 'неабичого',
            'неабичому', 'неабищо', 'небагато', 'небагатьма', 'небагатьом',
            'небагатьох', 'небудь', 'невважаючи', 'невже', 'недалеко',
            'недалеко від', 'неж', 'незалежно від', 'незважаючи',
            'незважаючи на', 'ней', 'немає', 'немов', 'немовби', 'немовбито',
            'неначе', 'неначебто', 'неподалеку', 'неподалеку від',
            'неподалечку', 'неподалечку від', 'неподалік', 'неподалік від',
            'нерідко', 'нех', 'нехай', 'нещодавно', 'нею', 'неї', 'нижче',
            'низько', 'ник', 'ним', 'ними', 'них', 'нич', 'но', 'ну', 'нуг',
            'нуд', 'нум', 'нумо', 'нумте', 'ньо', 'нього', 'ньому', 'ню',
            'нюх', 'ня', 'няв', 'ні', 'ніби', 'ніби-то', 'нібито', 'ніде',
            'ніж', 'нізащо', 'нізвідки', 'нізвідкіля', 'ній', 'ніким',
            'нікого', 'нікогісінько', 'ніколи', 'нікому', 'нікотра', 'нікотре',
            'нікотрий', 'нікотрим', 'нікотрими', 'нікотрих', 'нікотрого',
            'нікотрому', 'нікотрою', 'нікотрої', 'нікотру', 'нікотрі',
            'нікотрій', 'нікотрім', 'нікуди', 'нім', 'нінащо', 'ніскільки',
            'ніт', 'ніхто', 'нічий', 'нічийна', 'нічийне', 'нічийний',
            'нічийним', 'нічийними', 'нічийних', 'нічийного', 'нічийному',
            'нічийною', 'нічийної', 'нічийну', 'нічийні', 'нічийній',
            'нічийнім', 'нічийого', 'нічийому', 'нічим', 'нічию', 'нічия',
            'нічиє', 'нічиєму', 'нічиєю', 'нічиєї', 'нічиї', 'нічиїй',
            'нічиїм', 'нічиїми', 'нічиїх', 'нічого', 'нічому', 'ніщо', 'ніяк',
            'ніяка', 'ніяке', 'ніякий', 'ніяким', 'ніякими', 'ніяких',
            'ніякого', 'ніякому', 'ніякою', 'ніякої', 'ніяку', 'ніякі',
            'ніякій', 'ніякім', 'ніякісінька', 'ніякісіньке', 'ніякісінький',
            'ніякісіньким', 'ніякісінькими', 'ніякісіньких', 'ніякісінького',
            'ніякісінькому', 'ніякісінькою', 'ніякісінької', 'ніякісіньку',
            'ніякісінькі', 'ніякісінькій', 'ніякісінькім', 'о', 'об', 'обабіч',
            'обаполи', 'обидва', 'обр', 'обік', 'обіруч', 'обіч', 'ов', 'од',
            'один', 'одинадцятий', 'одинадцять', 'одна', 'однак', 'одначе',
            'одне', 'одним', 'одними', 'одних', 'одно', 'одного',
            'одного разу', 'одному', 'одною', 'одної', 'одну', 'одні', 'одній',
            'однім', 'однією', 'однієї', 'ож', 'ой', 'окрай', 'окроме',
            'округ', 'округи', 'окрім', 'окіл', 'ом', 'он', 'онде', 'онно',
            'оно', 'оподаль', 'оподаль від', 'оподалік', 'оподалік від',
            'опостін', 'опостінь', 'опроче', 'опріч', 'опріче', 'опісля',
            'осе', 'оскільки', 'особливо', 'осторонь', 'ось', 'осісьо', 'от',
            'ота', 'отак', 'отака', 'отаке', 'отакий', 'отаким', 'отакими',
            'отаких', 'отакого', 'отакому', 'отакою', 'отакої', 'отаку',
            'отакі', 'отакій', 'отакім', 'отакісінька', 'отакісіньке',
            'отакісінький', 'отакісіньким', 'отакісінькими', 'отакісіньких',
            'отакісінького', 'отакісінькому', 'отакісінькою', 'отакісінької',
            'отакісіньку', 'отакісінькі', 'отакісінькій', 'отакісінькім',
            'отам', 'оте', 'отже', 'отим', 'отими', 'отих', 'ото', 'отого',
            'отож', 'отой', 'отому', 'отою', 'отої', 'отсе', 'оттак', 'отто',
            'оту', 'отут', 'оті', 'отій', 'отім', 'отією', 'отієї', 'ох',
            'оце', 'оцей', 'оцим', 'оцими', 'оцих', 'оцього', 'оцьому', 'оцю',
            'оця', 'оці', 'оцій', 'оцім', 'оцією', 'оцієї', 'п', "п'я",
            "п'ятий", "п'ятнадцятий", "п'ятнадцять", "п'ять", 'па', 'пад',
            'пак', 'пек', 'перед', 'передо', 'переді', 'перетака', 'перетаке',
            'перетакий', 'перетаким', 'перетакими', 'перетаких', 'перетакого',
            'перетакому', 'перетакою', 'перетакої', 'перетаку', 'перетакі',
            'перетакій', 'перетакім', 'перший', 'пиж', 'плі', 'по', 'поблизу',
            'побік', 'побіля', 'побіч', 'поверх', 'повз', 'повздовж',
            'повинно', 'повище', 'повсюди', 'повсюдно', 'подаль від',
            'подалі від', 'подекуди', 'подеяка', 'подеяке', 'подеякий',
            'подеяким', 'подеякими', 'подеяких', 'подеякого', 'подеякому',
            'подеякою', 'подеякої', 'подеяку', 'подеякі', 'подеякій',
            'подеякім', 'подовж', 'подібно до', 'поз', 'поза', 'позад',
            'позаду', 'позата', 'позате', 'позатим', 'позатими', 'позатих',
            'позатого', 'позатой', 'позатому', 'позатою', 'позатої', 'позату',
            'позаті', 'позатій', 'позатім', 'позатією', 'позатієї', 'позаяк',
            'поздовж', 'поки', 'покрай', 'покіль', 'помежи', 'помимо', 'поміж',
            'помість', 'понад', 'понадо', 'понаді', 'понижче', 'пообіч',
            'поодаль від', 'поодалік від', 'поперед', 'попереду', 'поперек',
            'попліч', 'попри', 'попросту', 'попід', 'пора', 'поруч', 'поряд',
            'поряд з', 'порівняно з', 'посеред', 'посередині', 'потрібно',
            'потім', 'поуз', 'початку', 'почерез', 'праворуч від', 'пред',
            'предо', 'преді', 'прекрасно', 'прецінь', 'при', 'притому',
            'причому', 'причім', 'про', 'проз', 'промеж', 'проміж', 'просто',
            'проте', 'проти', 'против', 'противно', 'протягом', 'пря', 'пріч',
            'пхе', 'пху', 'пі', 'пів', 'півперек', 'під', 'під знаком',
            'під приводом', 'під час', 'підо', 'пізніше', 'пім', 'пір',
            'після', 'р', 'ради', 'раз', 'разом з', 'разу', 'рано', 'раніш',
            'раніш від', 'раніше', 'раніше від', 'раптом', 'ре', 'рет', 'риж',
            'рим', 'рип', 'роб', 'року', 'років', 'рос', 'рох', 'році', 'рус',
            'рух', 'руч', 'рік', 'с', 'саж', 'саз', 'сак', 'сам', 'сама',
            'саме', 'сами', 'самий', 'самим', 'самими', 'самих', 'само',
            'самого', 'самому', 'самою', 'самої', 'саму', 'самі', 'самій',
            'самім', 'сап', 'сас', 'свого', 'свою', 'своя', 'своє', 'своєму',
            'своєю', 'своєї', 'свої', 'своїй', 'своїм', 'своїми', 'своїх',
            'свій', 'се', 'себе', 'себто', 'сей', 'сен', 'серед', 'середи',
            'середу', 'сеч', 'си', 'сив', 'сиг', 'сиз', 'сик', 'сиріч', 'сих',
            'сказав', 'сказала', 'сказати', 'скрізь', 'скільки', 'скільки-то',
            'скількись', 'скільком', 'скількома', 'скількомась', 'скількомось',
            'скількомсь', 'скількох', 'скількохось', 'скількохсь', 'сли',
            'слідом за', 'соб', 'собою', 'собі', 'соп', 'спасибі', 'спереду',
            'спочатку', 'справ', 'справді', 'став', 'стосовно', 'стільки',
            'стільком', 'стількома', 'стількох', 'су', 'судячи з', 'супроти',
            'супротив', 'суть', 'суч', 'суш', 'сьогодні', 'сьомий', 'сюди',
            'ся', 'сяг', 'сяк', 'сяка', 'сяке', 'сякий', 'сяким', 'сякими',
            'сяких', 'сякого', 'сякому', 'сякою', 'сякої', 'сяку', 'сякі',
            'сякій', 'сякім', 'сям', 'сі', 'сім', 'сімнадцятий', 'сімнадцять',
            'сіп', 'т', 'та', 'таж', 'так', 'така', 'таке', 'такенна',
            'такенне', 'такенний', 'такенним', 'такенними', 'такенних',
            'такенного', 'такенному', 'такенною', 'такенної', 'такенну',
            'такенні', 'такенній', 'такеннім', 'таки', 'такий', 'таким',
            'такими', 'таких', 'такого', 'також', 'такому', 'такою', 'такої',
            'таку', 'такі', 'такій', 'такім', 'такісінька', 'такісіньке',
            'такісінький', 'такісіньким', 'такісінькими', 'такісіньких',
            'такісінького', 'такісінькому', 'такісінькою', 'такісінької',
            'такісіньку', 'такісінькі', 'такісінькій', 'такісінькім', 'тал',
            'там', 'тамки', 'тамта', 'тамте', 'тамтим', 'тамтими', 'тамтих',
            'тамтого', 'тамтой', 'тамтому', 'тамтою', 'тамтої', 'тамту',
            'тамті', 'тамтій', 'тамтім', 'тамтією', 'тамтієї', 'тар', 'тат',
            'таш', 'тва', 'твого', 'твою', 'твоя', 'твоє', 'твоєму', 'твоєю',
            'твоєї', 'твої', 'твоїй', 'твоїм', 'твоїми', 'твоїх', 'твій', 'те',
            'тебе', 'тег', 'теж', 'тем', 'тепер', 'теперечки', 'тес', 'теф',
            'теє', 'ти', 'тик', 'тил', 'тим', 'тими', 'тисяч', 'тих', 'то',
            'тобою', 'тобто', 'тобі', 'того', 'тоді', 'тож', 'той', 'тол',
            'тому', 'тому що', 'тот', 'тощо', 'тою', 'тої', 'тра', 'тре',
            'треба', 'третій', 'три', 'тринадцятий', 'тринадцять', 'трохи',
            'тс', 'тсс', 'ту', 'туди', 'тудою', 'туп', 'тут', 'тутеньки',
            'тутечки', 'тутки', 'туф', 'туц', 'тю', 'тюг', 'тюп', 'тяг', 'тяж',
            'тям', 'тяп', 'ті', 'тій', 'тільки', 'тім', 'тією', 'у', 'у бік',
            'у вигляді', 'у випадку', 'у відповідності до', 'у відповідь на',
            'у залежності від', "у зв'язку з", 'у міру', 'у напрямі до',
            'у порівнянні з', 'у процесі', 'у результаті', 'у ролі', 'у силу',
            'у сторону', 'у супроводі', 'у ході', 'ув', 'увесь', 'уві', 'угу',
            'уже', 'узбіч', 'уздовж', 'укр', 'ум', 'унаслідок', 'униз',
            'унизу', 'унт', 'уперед', 'уподовж', 'упоперек', 'упритиск до',
            'упритул до', 'упродовж', 'упрост', 'ус', 'усе', 'усередині',
            'услід', 'услід за', 'усупереч', 'усього', 'усьому', 'усю',
            'усюди', 'уся', 'усяк', 'усяка', 'усяке', 'усякий', 'усяким',
            'усякими', 'усяких', 'усякого', 'усякому', 'усякою', 'усякої',
            'усяку', 'усякі', 'усякій', 'усякім', 'усі', 'усій', 'усіляка',
            'усіляке', 'усілякий', 'усіляким', 'усілякими', 'усіляких',
            'усілякого', 'усілякому', 'усілякою', 'усілякої', 'усіляку',
            'усілякі', 'усілякій', 'усілякім', 'усім', 'усіма', 'усіх',
            'усією', 'усієї', 'утім', 'ух', 'ф', "ф'ю", 'фа', 'фаг', 'фай',
            'фат', 'фе', 'фед', 'фез', 'фес', 'фет', 'фзн', 'фоб', 'фот',
            'фра', 'фру', 'фу', 'фук', 'фур', 'фус', 'фіш', 'х', 'ха', 'хаз',
            'хай', 'хап', 'хат', 'хащ', 'хе', 'хет', 'хи', 'хиб', 'хм', 'хо',
            'хов', 'хол', 'хон', 'хоп', 'хор', 'хотіти', 'хоч', 'хоча',
            'хочеш', 'хро', 'хрю', 'хто', 'хтось', 'ху', 'хуз', 'хук', 'хух',
            'хху', 'хіба', 'ц', 'це', 'цебто', 'цей', 'цеп', 'ци', 'цим',
            'цими', 'цир', 'цих', 'цло', 'цоб', 'цок', 'цоп', 'цор', 'цс',
            'цсс', 'цуг', 'цур', 'цуц', 'цього', 'цьому', 'цю', 'цюк', 'ця',
            'цяв', 'цяп', 'ці', 'цід', 'цій', 'цім', 'ціною', 'цією', 'цієї',
            'ч', 'чал', 'чар', 'час', 'часто', 'частіше', 'часу', 'чах', 'чей',
            'чень', 'через', 'четвертий', 'чи', 'чий', 'чийого', 'чийогось',
            'чийому', 'чийомусь', 'чийсь', 'чик', 'чим', 'чимось', 'чимсь',
            'чир', 'численна', 'численне', 'численний', 'численним',
            'численними', 'численних', 'численні', 'чию', 'чиюсь', 'чия',
            'чиясь', 'чиє', 'чиєму', 'чиємусь', 'чиєсь', 'чиєю', 'чиєюсь',
            'чиєї', 'чиєїсь', 'чиї', 'чиїй', 'чиїйсь', 'чиїм', 'чиїми',
            'чиїмись', 'чиїмось', 'чиїмсь', 'чиїсь', 'чиїх', 'чиїхось',
            'чиїхсь', 'чля', 'чого', 'чогось', 'чом', 'чому', 'чомусь', 'чон',
            'чоп', 'чортзна', 'чос', 'чотири', 'чотирнадцятий', 'чотирнадцять',
            'чу', 'чум', 'чур', 'чш', 'чім', 'чімось', 'чімсь', 'чіт', 'ш',
            'ша', 'шаг', 'шал', 'шам', 'шво', 'шед', 'шен', 'шиз', 'шир',
            'шляхом', 'шостий', 'шістнадцятий', 'шістнадцять', 'шість', 'щ',
            'ще', 'щем', 'щеп', 'щип', 'щир', 'що', 'щоб', 'щоби', 'щодо',
            'щойно', 'щоправда', 'щось', 'щі', 'ь', 'ю', 'юз', 'юн', 'юнь',
            'юс', 'ют', 'юхт', 'я', 'яв', 'яд', 'яз', 'язь', 'як', 'яка',
            'якась', 'якби', 'яке', 'якесь', 'який', 'якийсь', 'яким', 'якими',
            'якимись', 'якимось', 'якимсь', 'яких', 'якихось', 'якихсь',
            'якого', 'якогось', 'якому', 'якомусь', 'якось', 'якою', 'якоюсь',
            'якої', 'якоїсь', 'якраз', 'яку', 'якусь', 'якщо', 'які', 'якій',
            'якійсь', 'якім', 'якімсь', 'якісь', 'ял', 'ям', 'ян', 'янь', 'яо',
            'яп', 'ярл', 'ясь', 'ять', 'є', 'єр', 'єси', 'і', 'ібн', 'ід',
            'із', 'із-за', 'із-під', 'іззаду', 'ізм', 'ізсередини', 'ік',
            'ікс', 'ікт', "ім'я", 'імовірно', 'інакша', 'інакше', 'інакший',
            'інакшим', 'інакшими', 'інакших', 'інакшого', 'інакшому',
            'інакшою', 'інакшої', 'інакшу', 'інакші', 'інакшій', 'інакшім',
            'інколи', 'іноді', 'інша', 'інше', 'інший', 'іншим', 'іншими',
            'інших', 'іншого', 'іншому', 'іншою', 'іншої', 'іншу', 'інші',
            'іншій', 'іншім', 'інь', 'іч', 'іще', 'ї', 'їдь', 'їй', 'їм', 'їх',
            'їхнього', 'їхньому', 'їхньою', 'їхньої', 'їхню', 'їхня', 'їхнє',
            'їхні', 'їхній', 'їхнім', 'їхніми', 'їхніх', 'її', 'ґ'
        ]
        text_list = text.split(" ")
        import pymorphy2
        morph = pymorphy2.MorphAnalyzer()  # lemmatization

        # words = ['грустно', 'зависимость', 'хорошему', 'приводит', 'альтернатив']
        text_list_lem = []
        for word in text_list:
            p = morph.parse(word)[0]
            text_list_lem.append(p.normal_form)
        #         print(p.normal_form)
        #     print(text_list_lem)
        text_list_lem = [
            word for word in text_list_lem if ((word not in stopwords) and (
                (word not in ukrainian_stopwords) and ("&nbsp" not in word) and
                (("\xa0" not in word))))
        ]
        return " ".join(text_list_lem)
예제 #9
0
 def __init__(self):
     self.ner = load_ner(models_path)
     self.morph = pymorphy2.MorphAnalyzer()
     self.Synonimizer = Synonimizer()
예제 #10
0
 def SearchResults(self):
     self.listplace.removeWidget(self.list)
     self.list = QListWidget()
     self.listplace.addWidget(self.list)
     self.FoundNoun = ''
     self.FoundVerb = ''
     if not self.WordToSearch:
         item = QListWidgetItem()
         item.setText('Введите слово для поиска!')
         font = QFont()
         font.setBold(True)
         item.setFont(font)
         self.list.addItem(item)
         return
     if ' ' in self.WordToSearch:
         item = QListWidgetItem()
         item.setText('Введите не более одного слова!')
         font = QFont()
         font.setBold(True)
         item.setFont(font)
         self.list.addItem(item)
         return
     morph = pymorphy2.MorphAnalyzer()
     word = self.WordToSearch.lower()
     parsed = morph.parse(word)
     noun = 0
     found = ''
     for p in parsed:
         if ('NOUN' in p.tag):
             found = p.normal_form
             noun = 1
             break
         if (('VERB' in p.tag) or ('INFN' in p.tag)):
             found = p.normal_form
             break
     if not found:
         item = QListWidgetItem()
         item.setText('Введите глагол или существительное!')
         font = QFont()
         font.setBold(True)
         item.setFont(font)
         self.list.addItem(item)
         return
     else:
         if noun:
             if (self.SearchNouns.get(found)):
                 self.FoundNoun = found
                 for v in sorted(self.SearchNouns[found].items(),
                                 key=lambda k_v: k_v[1]['amount'],
                                 reverse=True):
                     self.list.addItem(v[0])
             else:
                 item = QListWidgetItem()
                 item.setText('Не найдено')
                 font = QFont()
                 font.setBold(True)
                 item.setFont(font)
                 self.list.addItem(item)
                 return
         else:
             if (self.SearchVerbs.get(found)):
                 self.FoundVerb = found
                 for n in sorted(self.SearchVerbs[found].items(),
                                 key=lambda k_v: k_v[1]['amount'],
                                 reverse=True):
                     self.list.addItem(n[0])
             else:
                 item = QListWidgetItem()
                 item.setText('Не найдено')
                 font = QFont()
                 font.setBold(True)
                 item.setFont(font)
                 self.list.addItem(item)
                 return
         self.list.itemClicked.connect(self.openContext)
예제 #11
0
    return arr


def getConversationNames(peer):
    j = getJSON(api_url + "messages.getConversationMembers?peer_id=" +
                str(peer) + "&v=5.80&access_token=" + token)
    mems = j['response']['profiles']
    res = []
    for i in mems:
        res.append(i['first_name'].lower())
        res.append(i['last_name'].lower())
    return res


import re, pymorphy2
morph = pymorphy2.MorphAnalyzer()  #Use it for calls to pymorphy2
'''Korobov M.: Morphological Analyzer and Generator for Russian and
Ukrainian Languages // Analysis of Images, Social Networks and Texts,
pp 320-332 (2015).'''


def getStartForm(w):  #Узнать начальную форму
    try:
        p = morph.parse(w)[0]  #https://habr.com/post/176575/ -- Спасибо )))
        if ('PRTF' in p.tag):  #Причастие?
            return p.inflect({'sing', 'nomn'}).word
        return p.normal_form
    except Exception as e:
        print("Morph error:", e)
    return w
예제 #12
0
파일: solver25.py 프로젝트: tyz910/aij-2019
 def __init__(self, seed=42):
     self.is_train_task = False
     self.morph = pymorphy2.MorphAnalyzer()
     self.toktok = ToktokTokenizer()
     self.seed = seed
     self.init_seed()
예제 #13
0
async def morph():
    morph = pymorphy2.MorphAnalyzer()
    yield morph
예제 #14
0
 def normalize(self):
     morph = pymorphy2.MorphAnalyzer()
     info = morph.parse(self._inflect_word)
     self._normal_word = info[0][2]
     print(self._normal_word)
예제 #15
0
)  #удваиваем пробелы в тексте. Без этого последующее удаление стоп-слов происходит некорректно, т.к несколько слов сливаются в 1но.
text = re.sub("\s{1}[а-яА-Я\-]{1,3}\s{1}", "",
              text)  #убираем все слова размера 3 и меньше.
text = text.lower()

uni = nltk.word_tokenize(text)  #разбиваем текст на токены.
amount_uni = len(uni)  #считаем кол-во слов.
set_uni = set(
    uni
)  #составляем множество неповторяющихся слов в тексте, чтобы далее не обрабатывать несколько одинаковых слов.

for word in set_uni:
    if (
            word not in wordsused
    ):  #если программа не встречала такого слова при обучении, находим его нормальную форму с помощью библиотеки pymorphy2.
        wordsused[word] = pymorphy2.MorphAnalyzer().parse(word)[0].normal_form
    probability_dict[wordsused[word]] = probability_dict.get(
        wordsused[word], 0
    ) + uni.count(
        word
    )  #запоминаем сколько раз каждое слово встречалось в тексте с помощью словаря.

for phrase in nltk.bigrams(
        uni):  #теперь посчитаем сколько раз встречалась каждая биграмма.
    probability_dict[(wordsused[phrase[0]],
                      wordsused[phrase[1]])] = probability_dict.get(
                          (wordsused[phrase[0]], wordsused[phrase[1]]), 0) + 1

for pair in probability_dict.items(
):  #теперь словарь хранит вероятностную оценку использования юниграмм и биграмм.
    probability_dict[pair[0]] = pair[1] / amount_uni
예제 #16
0
 def __init__(self):
     self._kw_trees = self._load_kw_trees()
     self._morph = pymorphy2.MorphAnalyzer()
예제 #17
0
# django-cmstemplates
CMSTEMPLATES_USE_CODEMIRROR = True

# django-codemirror-widget
CODEMIRROR_PATH = 'vendor/codemirror'
CODEMIRROR_THEME = 'default'
CODEMIRROR_CONFIG = {'lineNumbers': True}

# django-ckeditor
CKEDITOR_UPLOAD_PATH = "uploads/"
CKEDITOR_IMAGE_BACKEND = 'pillow'
CKEDITOR_JQUERY_URL = os.path.join(STATIC_URL,
                                   'vendor/jquery/dist/jquery.min.js')
CKEDITOR_RESTRICT_BY_USER = True

# CKEDITOR_CONFIGS = {
#    'default': {}
# }

# celery
# таймаут для задач - 1 минута
CELERYD_TASK_SOFT_TIME_LIMIT = 60
BROKER_URL = e.get('CELERY_BROKER_URL')
CELERY_RESULT_BACKEND = e.get('CELERY_RESULT_BACKEND')

# pymorphy
import pymorphy2

MORPH = pymorphy2.MorphAnalyzer()
예제 #18
0
 def lemmatize(self, token):
     p = pymorphy2.MorphAnalyzer().parse(token)
     print(p)
     return p[0].normal_form
예제 #19
0
#Remove waste from merged file except [END] and Cases#
processed_content = file_content.replace('?', ' ').replace('!', ' ').replace(
    ';', ' ')  #preprocess
processed_content = processed_content.replace("'", '')
processed_content = processed_content.strip('\n\t')
processed_content = processed_content.replace(',', ' ').replace('.',
                                                                ' ').replace(
                                                                    '-', ' ')
processed_content = processed_content.replace('(',
                                              '').replace(')', '').replace(
                                                  'ред мод', ' ')
processed_content = processed_content.replace('<', '').replace('>', '')
#/Remove waste from merged file except [END] and Case#

#Normalize the text#
morph = pymorphy2.MorphAnalyzer()  #Morphology analyzer initiate
stemmer = SnowballStemmer("russian")
stop_words = get_stop_words('russian')
norm_mes = processed_content.split(
    '[END]')  #split processed text into messages
print('\nЧисло сообщений: ', len(norm_mes))

msg_lst = []
txt_stemmed = []
k = 0
percent = 0
print('\n')
for item in norm_mes:  #iterating over messages
    #preloader#
    k = k + 1
    progress = round(100 * k / len(norm_mes))
예제 #20
0
from nltk import word_tokenize
from nltk.corpus import stopwords
from nltk.stem.snowball import SnowballStemmer
import pymorphy2
import re

morph = pymorphy2.MorphAnalyzer()  # russian morphanalyzer
stemmer = SnowballStemmer("russian")  # russian stemmer
stop_words = stopwords.words("russian")  # russian stopwords


def stemm_preprocess(text):  # стемминг
    text1 = re.sub(r'[;/)(?!\.:,""«»\s]', ' ', text)  # Remove the punctuations
    tokens = word_tokenize(text1)  # tokenization
    tokens = [word.lower() for word in tokens
              if not word in stop_words]  # Remove stopword and make lower case
    tokens = [stemmer.stem(word) for word in tokens]  # stemming
    return tokens


def norm_preprocess(
        text):  # нормализация при помощи морфологического анализатора
    ls = list()
    text1 = re.sub(r'[;/)(?!\.:,""«»\s]', ' ', text)  # Remove the punctuations
    tokens = word_tokenize(text1)  # tokenization
    tokens = [word.lower() for word in tokens
              if not word in stop_words]  # Remove stopword and make lower case
    words = []
    for word in tokens:
        p = morph.parse(word)[0]  # normal form
        words.append(p.normal_form)
예제 #21
0
    def __init__(self, model, tok):
        self.model = model

        self.model._make_predict_function()
        self.graph = tf.get_default_graph()

        self.tok = tok
        self.nlp_ = spacy.load('xx_ent_wiki_sm')
        self.morph_ = pymorphy2.MorphAnalyzer()

        self.negativePatterns_ = []

        # Угроза бана
        self.negativePatterns_.append([{"LOWER": "бан"}])
        self.negativePatterns_.append([{"LOWER": "забанить"}])
        self.negativePatterns_.append([{"LOWER": "банить"}])

        # Критика команды
        self.negativePatterns_.append([{
            "LOWER": "причина"
        }, {
            "OP": "+"
        }, {
            "LOWER": "задержка"
        }])
        self.negativePatterns_.append([{
            "LOWER": "когда"
        }, {
            "OP": "+"
        }, {
            "LOWER": "отчёт"
        }])
        self.negativePatterns_.append([{
            "LOWER": "задерживать"
        }, {
            "OP": "+"
        }, {
            "LOWER": "отчёт"
        }])
        self.negativePatterns_.append([{
            "LOWER": "задержать"
        }, {
            "OP": "+"
        }, {
            "LOWER": "отчёт"
        }])

        self.negativePatterns_.append([{
            "LOWER": "когда"
        }, {
            "OP": "+"
        }, {
            "LOWER": "исправить"
        }])

        self.negativePatterns_.append([{
            "LOWER": "удалять"
        }, {
            "OP": "+"
        }, {
            "LOWER": "сообщение"
        }])

        # Мошенничество
        self.negativePatterns_.append([{"LOWER": "мошенничество"}])
        self.negativePatterns_.append([{"LOWER": "мошеннический"}])
        self.negativePatterns_.append([{"LOWER": "обман"}])
        self.negativePatterns_.append([{"LOWER": "обманщик"}])
        self.negativePatterns_.append([{"LOWER": "кидалово"}])
        self.negativePatterns_.append([{"LOWER": "кинуть"}])
        self.negativePatterns_.append([{"LOWER": "распил"}])
        self.negativePatterns_.append([{"LOWER": "развод"}])

        self.negativePatterns_.append([{
            "LOWER": "совесть"
        }, {
            "OP": "+"
        }, {
            "LOWER": "мучить"
        }])
        self.negativePatterns_.append([{
            "LOWER": "никакой"
        }, {
            "OP": "+"
        }, {
            "LOWER": "совесть"
        }])

        self.negativePatterns_.append([{
            "LOWER": "дарить"
        }, {
            "OP": "+"
        }, {
            "LOWER": "деньга"
        }])
        self.negativePatterns_.append([{
            "LOWER": "подарить"
        }, {
            "OP": "+"
        }, {
            "LOWER": "деньга"
        }])
        self.negativePatterns_.append([{
            "LOWER": "отдать"
        }, {
            "OP": "+"
        }, {
            "LOWER": "деньга"
        }])

        # Цена токена
        self.negativePatterns_.append([{
            "LOWER": "сливать"
        }, {
            "OP": "+"
        }, {
            "LOWER": "токен"
        }])
        self.negativePatterns_.append([{
            "LOWER": "токен"
        }, {
            "OP": "+"
        }, {
            "LOWER": "фантик"
        }])
        self.negativePatterns_.append([{"LOWER": "фантики-токены"}])
        self.negativePatterns_.append([{
            "LOWER": "цена"
        }, {
            "OP": "+"
        }, {
            "LOWER": "была"
        }, {
            "OP": "+"
        }, {
            "LOWER": "сейчас"
        }])
        self.negativePatterns_.append([{
            "LOWER": "цена"
        }, {
            "OP": "+"
        }, {
            "LOWER": "токена"
        }, {
            "OP": "+"
        }, {
            "LOWER": "ниже"
        }])
        self.negativePatterns_.append([{
            "LOWER": "цена"
        }, {
            "OP": "+"
        }, {
            "LOWER": "токена"
        }, {
            "OP": "+"
        }, {
            "LOWER": "низкая"
        }])

        # Критика технологии
        self.negativePatterns_.append([{
            "LOWER": "медленно"
        }, {
            "OP": "+"
        }, {
            "LOWER": "работает"
        }])
        self.negativePatterns_.append([{"LOWER": "подвисает"}])
        self.negativePatterns_.append([{"LOWER": "подтормаживает"}])
        self.negativePatterns_.append([{"LOWER": "тормозит"}])
        self.negativePatterns_.append([{"LOWER": "баг"}])
        self.negativePatterns_.append([{"LOWER": "баги"}])
        self.negativePatterns_.append([{"LOWER": "глюк"}])
        self.negativePatterns_.append([{"LOWER": "глючит"}])
        self.negativePatterns_.append([{"LOWER": "лагает"}])

        # Нецензурная лексика
        self.negativePatterns_.append([{"LOWER": "ебать"}])
        self.negativePatterns_.append([{"LOWER": "хуй"}])
        self.negativePatterns_.append([{"LOWER": "пидорас"}])
        self.negativePatterns_.append([{"LOWER": "гандон"}])
        self.negativePatterns_.append([{"LOWER": "гондон"}])
        self.negativePatterns_.append([{"LOWER": "хуйня"}])
        self.negativePatterns_.append([{"LOWER": "херня"}])
        self.negativePatterns_.append([{"LOWER": "ублюдок"}])

        self.negativePhraseMatcher_ = Matcher(self.nlp_.vocab)

        i = 0
        while i < len(self.negativePatterns_):
            self.negativePhraseMatcher_.add(str(i), None,
                                            self.negativePatterns_[i])
            i += 1

        return
예제 #22
0
 def __init__(self):
     self.morph = pymorphy2.MorphAnalyzer()
import generator
import pymorphy2
import nltk
from nltk.collocations import *
import time
import re
from stemmer import stemmer1
"""
This programme performs terms extraction based on different approaches
"""

parser = pymorphy2.MorphAnalyzer()


class TaggedWord(object):
    def __init__(self, string, normal_form, token_type):
        self.string = string
        self.normal_form = normal_form
        self.token_type = token_type

    def __repr__(self):
        return '%s (%s) %s' % (self.string, self.normal_form, self.token_type)


def tagging(
    file
):  # this function creates a dictionary with sentence number as a key and object of class TaggedWord as a value
    myDict = {}
    TaggedWords = {}
    myFile = open(file, encoding='utf-8')
    for num, line in enumerate(myFile):
예제 #24
0
    try:
        query = r.recognize_google(audio, language="ru-RU")
        print('\rРаспознано: \"%s\"      ' % query, end='')

    except sr.UnknownValueError:
        print("\rGoogle Speech Recognition could not understand audio\n")
        query = "ERROR"

    except sr.RequestError as e:
        print("Could not request results from Google Speech Recognition service\n")
        query = "ERROR"

    return query


morph = pm2.MorphAnalyzer()
r = sr.Recognizer()


def text_analyze(x):
    class analyze:
        def __init__(self, color, count, subject, material):
            self.color = color
            self.count = count
            self.subject = subject
            self.material = material

    analyze.color, analyze.count, analyze.material, analyze.subject = (
        (0, 0, 0), (255, 255, 255)), 1, "", ""  # Значения по дефолту
    x = x.split(" ")
예제 #25
0
from nltk.tokenize import TweetTokenizer
import pymorphy2

twtk = TweetTokenizer()
morph = pymorphy2.MorphAnalyzer(lang='uk')

words = []
# with open("../data/VelikaIstoriyaYkrajni_1412180965.txt", "r") as file:
#     c = 0
#     for line in file.readlines():
#         #if c > 1000:
#             #break
#         words.extend([morph.parse(word)[0].normal_form for word in twtk.tokenize(line) if word.isalpha()])
#         c += 1
#
# with open("../data/words_lemmatized.txt", "w") as file:
#     for w in words:
#         file.write(w + "\n")

with open("../data/words_lemmatized.txt", "r") as file:
    words.extend(file.readlines())

# print(words)
print("written")

dict = []
with open("../dictionaries/toponims.txt", "r") as file:
    dict.extend(file.readlines())

match = set()
print(dict[43])
예제 #26
0
import itertools

import nltk
import pymorphy2
from nltk.data import load
from nltk.tokenize import word_tokenize
from nltk.tokenize.punkt import PunktSentenceTokenizer, PunktLanguageVars

from app.api.rules.rules import SENTENCES_SPLIT_REGEX, ADDITIONAL_ABBREVIATIONS, SENTENCES_SPLIT_ADD_REGEX

PUNCTUATION = ' "#$%&()*+.!?«»,\'-/:;<=>@[]^_`{|}~—…'
MORPH_ANALYZER = pymorphy2.MorphAnalyzer()
TAG = MORPH_ANALYZER.TagClass

nltk.download('punkt')

TOKENIZER = load("tokenizers/punkt/{0}.pickle".format('russian'))
TOKENIZER._params.abbrev_types.update(ADDITIONAL_ABBREVIATIONS)


def tokenize_sentences(text):
    result = []
    sentences = text.split('…\n')
    for sentence in sentences:
        result.extend(TOKENIZER.tokenize(sentence))
    return [
        s.replace('\r\n', '\n').replace('\n\n', '\n').strip() for s in result
    ]


def tokenize_corp_sentences(text):
예제 #27
0
def create_db_bm25(file_name, path_to_db):
    b = 0.75
    k = 2.0
    documents1 = []
    documents2 = []
    related = {}

    morph = pymorphy2.MorphAnalyzer()
    df = pd.read_csv("quora.csv")

    for i, row in df[:5000].iterrows():
        id1 = "q" + str(i)
        id2 = "d" + str(i)

        doc1 = str(row["question1"]).lower()
        doc1 = re.split(r"[^а-яё]+", doc1)
        doc1 = [morph.parse(word)[0].normal_form for word in doc1]
        documents1.append(doc1)

        doc2 = str(row["question2"]).lower()
        doc2 = re.split(r"[^а-яё]+", doc2)
        doc2 = [morph.parse(word)[0].normal_form for word in doc2]
        documents2.append(doc2)

        if row["is_duplicate"] == 1:
            if id1 not in related:
                related[id1] = []
            related[id1].append(id2)

    avgdl = np.mean([len(document) for document in documents2])

    idf = {}
    for document in documents2:
        for word in set(document):
            if word not in idf:
                idf[word] = 1
            else:
                idf[word] += 1
    idf = {
        word: log((len(documents2) - idf[word] + 0.5) / (idf[word] + 0.5))
        for word in idf
    }

    indptr = [0]
    indices = []
    data = []
    vocabulary = {}
    for document in documents2:
        for word in document:
            index = vocabulary.setdefault(word, len(vocabulary))
            indices.append(index)
            data.append(idf[word] * tf(word, document) * (k + 1) /
                        (tf(word, document) + k *
                         (1 - b + b * len(document) / avgdl)))
        indptr.append(len(indices))

    path = os.path.join(path_to_db, "bm25")

    data = csr_matrix((data, indices, indptr))

    if not os.path.exists(path):
        os.mkdir(path)

    with open(os.path.join(path, "documents.pickle"), "wb") as pickle_file:
        pickle.dump(documents2, pickle_file)

    with open(os.path.join(path, "vocabulary.pickle"), "wb") as pickle_file:
        pickle.dump(vocabulary, pickle_file)

    with open(os.path.join(path, "data.pickle"), "wb") as pickle_file:
        pickle.dump(data, pickle_file)
예제 #28
0
def normalize(text):
    morph = pymorphy2.MorphAnalyzer()
    s = ''
    for el in text.split(' '):
        s += morph.parse(el)[0].normal_form + ' '
    return s
예제 #29
0
    'в общем прекрасно': 'positive',
    'нам все понравилось': 'positive',
    'в целом ничего': 'positive',
    'отвратительный': 'negative',
    'быстро': 'positive',
    'очень плохое обслуживание': 'negative',
    'отличное меню': 'positive',
    'хороший': 'positive',
    'вкусный': 'positive',
    'замечательный': 'positive',
    'приятный': 'positive',
    'красивый': 'positive',
    'отличный': 'positive'
}

morph = pymorphy2.MorphAnalyzer()
tokenizer = TreebankWordTokenizer()

RUS_LETTERS = u'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'

# Для POS в cleanization
transit = {
    'ADJF': 'ADJ',
    'ADJS': 'ADJ',
    'ADVB': 'ADV',
    'COMP': 'ADV',
    'CONJ': 'CCONJ',
    'GRND': 'VERB',
    'INFN': 'VERB',
    'INTJ': 'INTJ',
    'LATN': 'X',
예제 #30
0
def test_old_dictionaries_supported():
    pytest.importorskip("pymorphy2_dicts")
    m = pymorphy2.MorphAnalyzer(lang='ru-old')
    assert m.lang == 'ru-old'
    assert m.tag('стиль')[0].POS == 'NOUN'