Skip to content
The Chat Archive
Human-written demonstration (OpenAssistant volunteers)· OpenAssistant (human-written) OpenAssistant Conversations (oasst2)

Сделай скрипт, который из формата вики преобразует текст в Markdown и удаляет из него…

In OpenAssistant data, “assistant” turns were written by human volunteers as demonstrations. They are not model outputs.
  1. User

    Сделай скрипт, который из формата вики преобразует текст в Markdown и удаляет из него все внешние ссылки и ссылки на другие статьи вики

  2. Assistant

    Вот простой скрипт на Python:

    import re
    
    def convert_wiki_to_md(text):
        # Удаление ссылок
        text = re.sub(r'\[\[(?:[^\]|]*\|)?([^\]|]+)\]\]', r'\1', text)
        text = re.sub(r'\[(?:[^\]]+)?\]', '', text)
    
        # Преобразование заголовков
        for i in range(6, 0, -1):
            text = re.sub(r'^(={{{}}} )(.+?)( {{{}}}=)'.format(i, i), r'{} \2'.format('#' * i), text, flags=re.MULTILINE)
    
        # Преобразование списков
        text = re.sub(r'^(\*+) (.+)', lambda match: '  ' * (len(match.group(1)) - 1) + '* ' + match.group(2), text, flags=re.MULTILINE)
        text = re.sub(r'^(\#+) (.+)', lambda match: '  ' * (len(match.group(1)) - 1) + '1. ' + match.group(2), text, flags=re.MULTILINE)
    
        # Преобразование выделения текста
        text = re.sub(r"'''(.+?)'''", r'**\1**', text)
        text = re.sub(r"''(.+?)''", r'*\1*', text)
    
        return text
    

    Этот скрипт удаляет все ссылки из текста и преобразует заголовки, списки и выделение текста из формата вики в формат Markdown. Вы можете использовать его как отправную точку и добавить дополнительные функции или изменить его в соответствии с вашими потребностями.

  3. User

    Спасибо, код вроде работает, но мне не совсем ясны каими должны быть входные данные.

    если это страница html то данная функция его не выполняет.

    если же это просто скопированный текст с веб страницы то оформление не сорханится, а значит я неверно указал условия.

    пожалуйста переделай этот код для преобразования страницы html сайта wikipedia в markdown с удалением всех внешних ссылок на другие статьи википедии

  4. Assistant

    Конечно, вот исправленный код:

    import re
    from bs4 import BeautifulSoup
    
    def convert_wiki_to_md(html):
        # Parse the HTML using BeautifulSoup
        soup = BeautifulSoup(html, 'html.parser')
        
        # Remove external links
        for link in soup.find_all('a'):
            if link.has_attr('href') and 'wikipedia.org' not in link['href']:
                link.replace_with(link.text)
        
        # Convert the remaining HTML to Markdown
        md = str(soup)
        md = re.sub(r'<ref[^>]*>[^<]*</ref>', '', md)
        md = re.sub(r'(?m)^=+(.+?)=+$', lambda m: '#' * (m.group(0).count('=') - 1) + ' ' + m.group(1), md)
        md = re.sub(r'(?m)^\*(.*)$', lambda m: '- ' + m.group(1).strip(), md)
        md = re.sub(r'(?m)^\d+\.(.*)$', lambda m: '1. ' + m.group(1).strip(), md)
        md = re.sub(r"'''(.+?)'''", r'**\1**', md)
        md = re.sub(r"''(.+?)''", r'*\1*', md)
        md = re.sub(r'<[^>]+>', '', md)
        
        return md
    

    Этот код использует модуль BeautifulSoup для парсинга HTML и удаления внешних ссылок на другие статьи Википедии. Затем он использует регулярные выражения и lambda функции для преобразования оставшегося HTML в формат Markdown.