Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- \documentclass[14pt]{beamer}
- \usepackage[T2A]{fontenc}
- \usepackage[utf8]{inputenc}
- \usepackage[english,russian]{babel}
- \usepackage{amssymb,amsfonts,amsmath,mathtext}
- \usepackage{cite,enumerate,float,indentfirst}
- \usepackage{listings}
- \usepackage{color}
- \usepackage{relsize}
- \usepackage{ulem}
- \definecolor{gray}{rgb}{0.4,0.4,0.4}
- \definecolor{darkblue}{rgb}{0.0,0.0,0.6}
- \definecolor{cyan}{rgb}{0.0,0.6,0.6}
- \definecolor{maroon}{rgb}{0.5,0,0}
- \definecolor{darkgreen}{rgb}{0,0.5,0}
- \newcommand\CC{C\nolinebreak[4]\hspace{-.05em}\raisebox{.4ex}{\relsize{-3}{\textbf{++}}}}
- \graphicspath{{images/}}
- \usetheme{Madrid}
- \usecolortheme{beaver}
- \setbeamertemplate{itemize items}[circle]
- \title[profanity-filter]
- {profanity-filter}
- \subtitle{Очистка текста от обсценной лексики}
- \author[Тимур~Исхаков]{Тимур~Исхаков}
- \institute[ФКН ВШЭ]{Факультет компьютерных наук\\Высшая школа экономики}
- \begin{document}
- \lstset{
- basicstyle=\ttfamily,
- columns=fullflexible,
- showstringspaces=false,
- commentstyle=\color{gray}\upshape
- }
- \lstdefinelanguage{XML}{
- basicstyle=\ttfamily,
- morestring=[s]{"}{"},
- morecomment=[s]{?}{?},
- morecomment=[s]{!--}{--},
- commentstyle=\color{darkgreen},
- moredelim=[s][\color{black}]{>}{<},
- moredelim=[s][\color{red}]{\ }{=},
- stringstyle=\color{blue},
- identifierstyle=\color{maroon}
- }
- \lstdefinelanguage{XML}
- \frame{\titlepage}
- \begin{frame}{Задачи}
- \begin{itemize}
- \item<2-> Очистить корпус ruTenTen.
- \item<3-> Очистить произвольный текст.
- \end{itemize}
- \pause\pause\pause
- \vspace{20pt}
- Очистить~--- удалить предложения, содержащие обсценную лексику.
- В качестве словаря матерных слов используется список запрещённых для регистрации доменных имён в зоне .рф (около $4\, 000$ слов).
- \end{frame}
- \begin{frame}{Корпус ruTenTen}
- Большой ($54$~ГБ), но {\it лемматизированный} текст.
- \vspace{10pt}
- Текст уже разбит на предложения, для каждого слова найдена {\it нормальная форма}.
- \end{frame}
- \begin{frame}[fragile]{Структура корпуса ruTenTen}
- {\small
- \begin{lstlisting}[language=XML]
- <doc>
- <p heading="0">
- <s>
- \end{lstlisting}
- \begin{tabular}{lllll}
- \small Преимущества & \footnotesize Ncnpnn- & \footnotesize Ncnpan & \footnotesize преимущество-n & \footnotesize преимущество\\
- \small деревянных & \footnotesize Afpmpgf & \footnotesize Afp-pgf & \footnotesize деревянный-a & \footnotesize деревянный\\
- \small винных & \footnotesize Afpmpgf & \footnotesize Afp-pgf & \footnotesize винный-a & \footnotesize винный\\
- \small погребов & \footnotesize Ncmpgn- & \footnotesize Ncmpgn & \footnotesize погреб-n & \footnotesize погреб\\
- \end{tabular}
- \begin{lstlisting}[language=XML]
- <g/>
- : - - :--
- </s>
- </p>
- </doc>
- \end{lstlisting}
- }
- \end{frame}
- \begin{frame}{Boost.Python}
- \only<1>{
- \begin{figure}
- \centering
- \includegraphics[width=0.6\linewidth]{python.png}
- \label{fig:cpp_python}
- \end{figure}
- }
- \only<2>{
- Обработка корпуса целиком написана на \CC.
- \pause
- \vspace{30pt}
- $1$~ГБ часть корпуса (MacBook Air, Intel Core i5 $1,3$~ГГц):
- \vspace{10pt}
- \begin{center}
- \begin{tabular}{c|c|c|c}
- CPython & PyPy & \CC & cp \\
- \hline
- 4m~28.525s & 1m~54.515s & 0m~15.135s & 0m~5.043s\\
- \end{tabular}
- \end{center}
- }
- \end{frame}
- \begin{frame}{Бор}
- \only<1>{
- \begin{figure}
- \includegraphics[width=\linewidth]{trie/first.eps}
- \end{figure}
- }
- \only<2>{
- \frametitle{Ахо--Корасик}
- \begin{figure}
- \includegraphics[width=\linewidth]{trie/second.eps}
- \end{figure}
- }
- \end{frame}
- \begin{frame}{ruTenTen}
- Обработка корпуса Sketch Engine~--- ruTenTen (54~ГБ, $69\, 672\, 587$ предложений, около $1,5$ миллиардов слов).
- \pause
- \vspace{30pt}
- Найдено около $180\, 000$ предложений, содержащих обсценную лексику.
- \end{frame}
- \begin{frame}{Произвольный текст}
- Текст имеет куда меньшие размеры, но в нём нет чёткой структуры.
- \pause
- \vspace{20pt}
- Проблемы:
- \begin{itemize}
- \item<3-> Разделение на предложения.
- \item<4-> Неточный {\it лемматизатор}.
- \item<5-> Ошибки и опечатки.
- \end{itemize}
- \end{frame}
- \begin{frame}{Разделение на предложения}
- \begin{itemize}
- \item<1-> Прямая речь.
- \pause
- \vspace{10pt}
- Волк закричал: <<Ну, погоди!>>
- --- Кто там? --- спросил дядя Фёдор. --- Это я!
- Он сказал: <<Я учусь в школе <<Интеллектуал>>.
- \vspace{20pt}
- \item<3-> Сокращения и точки.
- \pause\pause
- \vspace{10pt}
- Мой день рождения~--- 19.06.1996.
- Я встретил Вас. Иванова в офисе.
- \pause
- \vspace{10pt}
- %Я встретил Вас. Иванова в офисе.
- %
- Я встретил Вас\sout{илия} Иванова в офисе.
- \end{itemize}
- \end{frame}
- \begin{frame}{Неточный лемматизатор}
- Лемматизатор {\it pymorphy2} использует словари {\it OpenCorpora}.
- \pause
- \vspace{10pt}
- Некоторые слова в них отсутствуют. Можно попробовать исправить словари, можно смириться.
- \end{frame}
- \begin{frame}{Опечатки и ошибки}
- \begin{itemize}
- \item <2-> Проверка {\bf всех нормальных форм}, полученных лемматизатором.
- %\item <3-> Сравнение суффиксных деревьев.
- \item <3-> Расстояние Левенштейна по типичным ошибкам и опечаткам.
- \end{itemize}
- \end{frame}
- \begin{frame}{Типичные ошибки}
- \begin{center}
- \begin{tabular}{ccc}
- а $\leftrightarrow$ о &
- е $\leftrightarrow$ и $\leftrightarrow$ я \\
- е $\leftrightarrow$ ы $\leftrightarrow$ э &
- e $\leftrightarrow$ ё \\
- & \\
- и $\leftrightarrow$ ы &
- а $\leftrightarrow$ я \\
- у $\leftrightarrow$ ю & \\
- & \\
- к $\leftrightarrow$ г &
- ш $\leftrightarrow$ ж \\
- з $\leftrightarrow$ с &
- ф $\leftrightarrow$ в \\
- п $\leftrightarrow$ б &
- д $\leftrightarrow$ т \\
- \end{tabular}
- \end{center}
- \end{frame}
- \begin{frame}{Типичные опечатки}
- \only<2>{
- \begin{itemize}
- \item Замена букв на соседние.
- \item<3-> Схлопывание одинаковых букв, идущих подряд:
- <<привеееееееееееет>> $\rightarrow$ <<привет>>.
- \item<3-> Перестановка двух соседних букв.
- \item<3-> Добавление и удаление буквы.
- \end{itemize}
- }
- \only<3>{
- \begin{figure}
- \centering
- \includegraphics[trim={0 0 31.8cm 0},clip,width=\linewidth]{keyboard/none.eps}
- \label{fig:keyboard}
- \end{figure}
- }
- \only<4>{
- \begin{figure}
- \centering
- \includegraphics[trim={0 0 31.8cm 0},clip,width=\linewidth]{keyboard/pressed.eps}
- \label{fig:keyboard}
- \end{figure}
- }
- \only<5>{
- \begin{figure}
- \centering
- \includegraphics[trim={0 0 31.8cm 0},clip,width=\linewidth]{keyboard/around.eps}
- \label{fig:keyboard}
- \end{figure}
- }
- \only<6->{
- \begin{itemize}
- \item<6-> Замена букв на соседние.
- \item<7-> Схлопывание одинаковых букв, идущих подряд:
- <<привеееееееееееет>> $\rightarrow$ <<привет>>.
- \item<8-> Перестановка двух соседних букв.
- \item<9-> Добавление и удаление буквы.
- \end{itemize}
- }
- \end{frame}
- \begin{frame}[fragile]{Использование программы}
- Утилита будет добавлена в PyPI.
- \vspace{20pt}
- Запуск:
- \begin{lstlisting}[language=bash]
- profanity-filter corpus.vert clean.vert
- \end{lstlisting}
- \vspace{10pt}
- Также возможно использование собственного словаря.
- \vspace{20pt}
- Программа показывает прогресс обработки.
- \end{frame}
- \begin{frame}{Пример работы}
- \begin{figure}
- \centering
- \includegraphics[width=0.9\linewidth]{screenshot.jpg}
- \label{fig:screenshot}
- \end{figure}
- \end{frame}
- \begin{frame}
- \begin{figure}
- \centering
- \includegraphics[trim={2mm 6cm 2mm 2mm},clip,width=0.6\linewidth]{lebedev.png}
- \label{fig:lebedev}
- \end{figure}
- \end{frame}
- \end{document}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement