コード例 #1
0
ファイル: headers.py プロジェクト: 2vitalik/words
 def check_header(self, page, before, header, after):
     title = page.title
     line = "%s%s%s" % (before, header, after)
     header = header.strip()
     if before != after:
         return  # это другая ошибка (syntax)
     need_level = header_levels.get(header, 0)
     level = len(before)
     if need_level and level > 1:
         if need_level != level:
             # пропустим иерогливы, морфемы и прочее
             content = page.content
             skips = [
                 u"= {{-Hani-}} =",
                 u"= {{-hani-}} =",
                 u"= {{-hanzi-",
                 u"= {{-mul-}} =",
                 u"= {{-INT-}} =",
                 u"= {{-Zmth-}} =",
                 u"{{suffix ",
                 u"{{morph",
                 u"== Буква ==",
                 u"Словообразовательная единица",
             ]
             for skip in skips:
                 if skip in content:
                     return
             # print u"→", title
             # print line
             return line
     return
コード例 #2
0
ファイル: wrong_level.py プロジェクト: 2vitalik/words
    def header_action(self, page, before, header, after):
        super(WrongLevel, self).header_action(page, before, header, after)
        title = page.title
        if ":" in title:
            return
        if title == u"Заглавная страница":  # todo: move it to HeadersIterator
            return
        full_header = self.get_header(before, header, after)
        level = len(before)
        header = header.strip()
        correct_level = header_levels.get(header, 0)
        if correct_level:
            correct_levels = [correct_level]
        else:
            correct_levels = []

        has_affix = False
        for s in [u"{{suffix ", u"{{morph", u"Словообразовательная единица"]:
            if s in page.content:
                has_affix = True
                break

        if title.startswith("-") or title.endswith("-"):
            # это точно словообразовательная единица
            if header in [u"Значение", u"Антонимы", u"Синонимы"]:
                correct_levels = [3, 4]
        elif title.startswith("*"):
            # это точно праязык
            if header == u"Значение":
                correct_levels = [3, 4]
        elif has_affix:
            if header in [u"Значение", u"Антонимы", u"Синонимы"]:
                correct_levels = [3, 4]
        elif len(title) == 1:
            if header in [u"Значение"]:
                correct_levels = [3, 4]
        if correct_levels and level > 1:
            if level not in correct_levels:
                # skips = [
                #     # u'= {{-Hani-}} =', u'= {{-hani-}} =', u'= {{-hanzi-',
                #     # u'= {{-mul-}} =', u'= {{-INT-}} =', u'= {{-Zmth-}} =',
                #     # u'{{suffix ', u'{{morph', u'== Буква ==',
                #     u'Словообразовательная единица',
                # ]
                # for skip in skips:
                #     if skip in page.content:
                #         return
                append_dict_list(self.wrong_level, title, full_header)
                if settings.ALLOW_CYR_PRINT:
                    print "#wrong_level:", title, u"—", full_header
コード例 #3
0
ファイル: fix_header_levels.py プロジェクト: 2vitalik/words
    def change_header_action(self, page, before, header, after):
        title = page.title
        header_text = self.get_header(before, header, after)
        if ':' in title:
            return header_text

        level = len(before)
        header = header.strip()
        correct_level = header_levels.get(header, 0)

        has_affix = False
        for s in [u'{{suffix ', u'{{morph',
                  u'Словообразовательная единица']:
            if s in page.content:
                has_affix = True
                break

        if title.startswith('-') or title.endswith('-'):
            # это точно словообразовательная единица
            if header in [u'Значение', u'Антонимы', u'Синонимы']:
                return header_text
        elif title.startswith('*'):
            # это точно праязык
            if header == u'Значение':
                return header_text
        elif has_affix:
            if header in [u'Значение', u'Антонимы', u'Синонимы']:
                return header_text
        elif len(title) == 1:
            if header in [u'Значение']:
                return header_text

        if correct_level and level > 1:
            if level != correct_level:
                return u'{} {} {}\n'.format('=' * correct_level, header,
                                            '=' * correct_level)

        return header_text
コード例 #4
0
ファイル: headers.py プロジェクト: 2vitalik/words
    def check_header(self, page, before, header, after):

        morphs = [
            u"прилагательное",
            u"наречие",
            u"существительное",
            u"междометие",
            u"частица",
            u"глагол",
            u"местоимение",
            u"причастие",
            u"деепричастие",
            u"союз",
            u"числительное",
            u"предлог",
        ]
        morphs += map(lambda x: x.capitalize(), list(morphs))

        title = page.title  # .decode('utf-8')
        # print title
        line = "%s%s%s" % (before, header, after)
        header = header.strip()
        if before != after:
            return  # это другая ошибка (syntax)
        need_level = header_levels.get(header)
        level = len(before)
        if level > 2:
            # if level == 4:
            #     hs = header.strip()
            #     if hs and len(hs) > 1 and hs[0] == '-' or hs[-1:] == '-':
            #         return  # это для подразделов блока "Родственные слова"
            if not need_level:
                # print
                # print title
                # print line
                return line
        elif level == 2:
            if need_level:
                return  # это другая ошибка (level)
            if header in morphs:
                return
            if u"{{заголовок|" in header:
                return  # использования шаблона [{заголовок}} — норм
            rtitle = (
                title.replace("$", "\$")
                .replace(")", "\)")
                .replace("(", "\(")
                .replace("*", "\*")
                .replace(".", "\.")
                .replace("?", "\?")
            )
            pattern = u"^%s(?P<num> [IV]+)?( \((?P<morph>[а-я]+)\))?$" % rtitle
            # print pattern
            # todo: liquide: == существительное II ==
            # todo: list: ==list IV(глагол)==
            cleaned_header = remove_stress(header)
            latin_replacer = {u"ā": u"a", u"ē": u"e", u"ī": u"i", u"ō": u"o", u"ū": u"u"}
            for key, value in latin_replacer.items():
                cleaned_header = cleaned_header.replace(key, value)
            m = re.match(pattern, cleaned_header, flags=re.UNICODE)
            if not m:
                # print
                # print title
                # print line
                return line
            morph = m.group("morph")
            if morph:
                if morph not in morphs:
                    # print
                    # print title
                    # print line
                    return line
        return