Оглавление
Введение 4
1. Постановка задачи 6
2. Обзор предметной области 7
2.1. Поиск повторов в различных сферах 7
2.2. Поиск повторов в документации 9
3. Требования к механизму поиска 11
3.1. Анализ Duplicate Finder 11
3.2. Определение требований 13
4. Проектирование механизма поиска 14
4.1. Схема конвейера 14
4.2. Предобработка текста 15
4.3. Поиск точных повторов 17
4.4. Поиск неточных повторов 19
4.4.1. Алгоритм на основе редакционного расстояния . . 20
4.4.2. Алгоритм на основе N-грамм 23
4.5. Балансировка групп повторов 25
5. Особенности реализации 28
5.1. Используемые технологии 28
5.2. Архитектура 28
6. Тестирование 30
Заключение 36
Список литературы 37
Документация является неотъемлемой частью большинства крупных проектов. При этом с ростом и развитием продукта она становится все объемнее и запутаннее: на первых этапах жизненного цикла проекта документация может отсутствовать совсем, однако чем дольше проект находится в фазе реализации, тем больше функционала и особенностей нужно документировать. Неудивительно, что со временем на поддержку документации будет тратится все больше сил и времени, что затрудняет сопровождение проекта.
В целом документацию можно разделить на два типа: описательную и справочную [27]. Описательная документация нужна для общего ознакомления пользователя с продуктом: она не содержит много деталей работы продукта или технических подробностей, и в основном представлена естественным языком. Справочная, наоборот, ориентирована на пользователей, которые уже разбираются в предметной области, и просто хотят найти какую-либо специфичную информацию. Поэтому, справочная документация обычно является сводкой существующего функционала: список методов, интерфейсов и т.п., и часто представлена исходным кодом. На практике, в одном документе могут быть фрагменты обоих типов, то есть документация является сочетанием естественного языка и исходного кода.
Одним из наиболее влиятельных факторов усложнения ведения документации является наличие большого количества повторов. Они не только могут сильно раздувать общий объем, но также из-за них усложняется сохранение целостности — одно и то же изменения приходится вносить несколько раз в разные части документации, что легко может привести к ошибкам и пропускам. Исследования также показывают, что повторы могут существовать практически в любом документе, и их наличие не зависит от конкретики продукта [10, 28]. Кроме того, в этих работах подтверждается, что повторы действительно оказывают негативное влияние на общее качество документации.
Сам по себе поиск повторов практически всегда является некоторой подзадачей для достижения более осмысленной цели, поэтому он применяется в совершенно различных областях [1]. Например, в сфере разработки ПО наибольшее внимание уделяется поиску клонов в исходном коде [33]. Инструменты, основанные на этом подходе, предоставляют широкий спектр возможностей, от помощи с рефакторингом, до анализа недостатков глобальной архитектуры.
Однако, что касается более частной задачи поиска повторов в документации, данной теме уделяется не слишком много внимания, а если она и затрагивается, то лишь поверхностно. Существующие инструменты для работы с исходным кодом полагаются на достаточно специфичные особенности, такие как жесткая структура программы, семантика языков и т.п. [12, 39, 21]. Такие методы плохо подходят для работы с документацией из-за того, что она содержит не только фрагменты исходного кода, но и фрагменты на естественном языке.
Для решения задачи поиска повторов в документации был создан исследовательский прототип — Dupilcate Finder Toolkit [40], основной целью которого является работа с документацией. Данный инструмент представляет собой университетскую разработку, которая делалась многими людьми на протяжении большого временного промежутка, из-за чего проект состоит из множества составных частей, что сильно усложняет поддержку и дальнейшее развитие.
Особенно стоит отметить проблемы с компонентами, непосредственно отвечающими за поиск повторов [6, 41, 38]: они написаны на разных языках, некоторые из них являются внешними закрытыми разработками, они не разделяют потоков данных, повторяют некоторые этапы анализа несколько раз и в целом работают изолированно друг от друга. Для улучшения работы с пакетом было бы разумно разработать единую компоненту, целиком реализующую весь необходимый функционал.
1. Постановка задачи
Целью данной работы является разработка и реализация унифицированной подсистемы поиска точных и неточных повторов для Duplicate Finder Toolkit и ее интеграция с заменой существующих компонент. Для достижения этой цели в рамках работы были сформулированы следующие задачи.
1. Анализ предметной области — поиск повторов в текстах различных видов.
2. Определение проблем поиска повторов в DuplicateFinder и требований к новому механизму.
3. Проектирование конвейера механизма поиска повторов.
4. Разработка алгоритмов точного и неточного поиска.
5. Реализация инструмента и его интеграция в DuplicateFinder.
6. Проведение тестирования разработанного инструмента.
В ходе данной работы были получены следующие результаты.
1. Проанализированы основные подходы и средства, которые используются в существующих инструментах для поиска повторов: синтаксические и суффиксные деревья, нейронные сети, обработка естественного языка, алгоритмы хеширования, N-граммы.
2. Выявлены следующие основные требования к новому механизму поиска: объединение точного и неточного поиска, унификация процесса поиска, высокая степень настраиваемости.
3. Спроектирован конвейер для механизма поиска, состоящий из трех основных этапов: предобработка текста, применение алгоритмов поиска повторов, балансировка групп повторов.
4. Разработаны алгоритмы для точного и неточного поиска повторов на основе использованных в Duplicate Finder инструментов.
5. Выполнена реализация инструмента на языке Python с использованием пакета NLTK для предобработки текста, исходный код выложен на GitHub и доступен по ссылке https://github.com/IceWind2/TextDuplicateSearch; проведена интеграция с Duplicate Finder.
6. Проведено тестирование инструмента на корпусе документов, по результатам работы собрана статистика и проведен ее анализ.
[1] Alsulami Bassma S, Abulkhair Maysoon F, and Eassa Fathy E. Near duplicate document detection survey // International Journal of Computer Science and Communications Networks. — 2012.—Vol. 2, no. 2. —P. 147-151.
[2] Bialecki Andrzej, Muir Robert, Ingersoll Grant, and Imagination Lu¬cid. Apache lucene 4 // SIGIR 2012 workshop on open source infor¬mation retrieval. — 2012. — P. 17.
[3] Lagu6 Bruno, Proulx Daniel, Mayrand Jean, Merlo Ettore M, and Hudepohl John. Assessing the benefits of incorporating function clone detection in a development process // 1997 Proceedings International Conference on Software Maintenance / IEEE. —1997.—P. 314-321.
[4] Baker Brenda S. On finding duplication and near-duplication in large software systems // Proceedings of 2nd Working Conference on Reverse Engineering / IEEE. — 1995. — P. 86-95.
[5] Banerjee Sean, Cukic Bo jan, and Adjeroh Donald. Automated du¬plicate bug report classification using subsequence matching // 2012 IEEE 14th International Symposium on High-Assurance Systems En¬gineering / IEEE.—2012. — P. 74-81.
[6] Basit Hamid Abdul and Jarzabek Stan. Efficient token based clone detection with flexible tokenization // Proceedings of the the 6th joint meeting of the European software engineering conference and the ACM SIGSOFT symposium on The foundations of software engineering. — 2007. —P. 513-516.
[7] Bassett Paul G. The theory and practice of adaptive reuse // Pro¬ceedings of the 1997 symposium on Software reusability. — 1997. — P. 2-9.
[8] Bishop Chris M. Neural networks and their applications // Review of scientific instruments. — 1994.—Vol. 65, no. 6.—P. 1803-1832.
[9] Broder Andrei Z. On the resemblance and containment of docu¬ments // Proceedings. Compression and Complexity of SEQUENCES 1997 (Cat. No. 97TB100171) / IEEE. —1997.— P. 21-29.
[10] Juergens Elmar, Deissenboeck Florian, Feilkas Martin, Hummel Ben¬jamin, Schaetz Bernhard, Wagner Stefan, Domann Christoph, and Streit Jonathan. Can clone detection support quality assessments of re¬quirements specifications? // Proceedings of the 32nd ACM/IEEE In¬ternational Conference on Software Engineering-Volume 2. — 2010. — P. 79-88.
[11] Charikar Moses S. Similarity estimation techniques from rounding al-gorithms // Proceedings of the thiry-fourth annual ACM symposium on Theory of computing.—2002. — P. 380-388.
[12] Baxter Ira D, Yahin Andrew, Moura Leonardo, Sant’Anna Marcelo, and Bier Lorraine. Clone detection using abstract syntax trees // Proceedings. International Conference on Software Maintenance (Cat. No. 98CB36272) / IEEE. —1998.— P. 368-377.
[13] Cohen Edith and Kaplan Haim. Summarizing data using bottom-k sketches // Proceedings of the twenty-sixth annual ACM symposium on Principles of distributed computing. — 2007. — P. 225-234.
[14] Kanteev LD, Luciv DV, Koznov DV, Smirnov MN, et al. Discovering near duplicate text in software documentation // Труды Института системного программирования РАН. — 2017. — Vol. 29, no. 4. — P. 303-314.
[15] Mikolov Tomas, Sutskever Ilya, Chen Kai, Corrado Greg S, and Dean Jeff. Distributed representations of words and phrases and their compositionality // Advances in neural information processing sys¬tems. — 2013.—Vol. 26.
[16] Feng Weiqi and Deng Dong. Allign: Aligning all-pair near-duplicate passages in long texts // Proceedings of the 2021 International Con¬ference on Management of Data. — 2021.—P. 541-553.
[17] Gusfield Dan. Algorithms on stings, trees, and sequences: Computer science and computational biology // Acm Sigact News. — 1997. — Vol. 28, no. 4. —P. 41-60.
[18] Hirschberg Daniel S. A linear space algorithm for computing maximal common subsequences // Communications of the ACM. — 1975. — Vol. 18, no. 6. —P. 341-343.
[19] Ho Phuc-Tran, Kim Hee-Sun, and Kim Sung-Ryul. Application of sim-hash algorithm and big data analysis in spam email detection sys¬tem // Proceedings of the 2014 Conference on Research in Adaptive and Convergent Systems. — 2014. — P. 242-246.
[20] Karkkainen Juha and Sanders Peter. Simple linear work suffix array construction // Automata, Languages and Programming: 30th Inter-national Colloquium, ICALP 2003 Eindhoven, The Netherlands, June 30-July 4, 2003 Proceedings 30 / Springer. — 2003.—P. 943-955.
[21] Koschke Rainer, Falke Raimar, and Frenzel Pierre. Clone detection using abstract syntax suffix trees // 2006 13th Working Conference on Reverse Engineering / IEEE.—2006.—P. 253-262.
[22] Landau Gad M, Kasai Toru, Lee Gunho, Arimura Hiroki, Arikawa Set- suo, and Park Kunsoo. Linear-time longest-common-prefix compu¬tation in suffix arrays and its applications // Combinatorial Pattern Matching: 12th Annual Symposium, CPM 2001 Jerusalem, Israel, July 1-4, 2001 Proceedings 12 / Springer. — 2001. — P. 181-192.
[23] Manber Udi and Myers Gene. Suffix arrays: a new method for on¬line string searches // siam Journal on Computing. — 1993. —Vol. 22, no. 5. —P. 935-948.
[24] Broder Andrei Z, Charikar Moses, Frieze Alan M, and Mitzen- macher Michael. Min-wise independent permutations // Proceedings of the thirtieth annual ACM symposium on Theory of computing. — 1998. —P. 327-336.
[25] N-gram model [Electronic resource]. — Access mode: https://devopedia.org/n-gram-model (online; accessed: 2023.04.10).
[26] Nadkarni Prakash M, Ohno-Machado Lucila, and Chapman Wendy W. Natural language processing: an introduction // Journal of the Amer¬ican Medical Informatics Association. — 2011.—Vol. 18, no. 5.— P. 544-551.
[27] Parnas David Lorge. Precise documentation: The key to better software // The future of software engineering. — Springer, 2010. — P. 125-148.
[28] Poruban Jaroslav et al. Preliminary report on empirical study of re¬peated fragments in internal documentation // 2016 Federated Con¬ference on Computer Science and Information Systems (FedCSIS) / IEEE. —2016. —P. 1573-1576.
[29] Prabowo Damar Adi and Herwanto Guntur Budi. Duplicate question detection in question answer website using convolutional neural net¬work // 2019 5th International conference on science and technology (ICST) / IEEE. —2019. —Vol. 1. —P. 1-6.
[30] Vijayarani S, Ilamathi Ms J, Nithya Ms, et al. Preprocessing techniques for text mining-an overview // International Journal of Computer Sci¬ence & Communication Networks. — 2015.—Vol. 5, no. 1. — P. 7-16.
[31] Rachmawati Dian, Tarigan JT, and Ginting ABC. A comparative study of Message Digest 5 (MD5) and SHA256 algorithm // Journal of Physics: Conference Series / IOP Publishing. — 2018.—Vol. 978.— P. 012116.
[32] Rattan Dhavleesh, Bhatia Ra jesh, and Singh Maninder. Software clone detection: A systematic review // Information and Software Technol¬ogy. —2013.—Vol. 55, no. 7.—P. 1165-1199.
[33] Roy Chanchal Kumar and Cordy James R. A survey on software clone detection research // Queen’s School of Computing TR. — 2007.— Vol. 541, no. 115. — P. 64-68.
[34] Amoui Mehdi, Kaushik Nilam, Al-Dabbagh Abraham, Tahvil- dari Ladan, Li Shimin, and Liu Weining. Search-based duplicate defect detection: An industrial experience // 2013 10th Working Conference on Mining Software Repositories (MSR) / IEEE. — 2013.—P. 173¬182.
[35] Ukkonen Esko. Algorithms for approximate string matching // Infor¬mation and control. — 1985.—Vol. 64, no. 1-3. — P. 100-118.
[36] Wang Zhizhi, Zuo Chaoji, and Deng Dong. TxtAlign: Efficient Near-Duplicate Text Alignment Search via Bottom-k Sketches for Plagia¬rism Detection // Proceedings of the 2022 International Conference on Management of Data. — 2022. — P. 1146-1159.
[37] Yong-Xia Zhao and Ge Zhen. MD5 research // 2010 second interna¬tional conference on multimedia and information technology / IEEE. — 2010. —Vol. 2. —P. 271-273.
[38] Горгулов Павел Олегович. Модель N-грамм для поиска нечетких повторов в «плоских» текстах : Выпускная квалификационная работа бакалавра ; Санкт-Петербургский государственный университет. — 2018.
[39] Зельцер НГ. Поиск повторяющихся фрагментов исходного кода при автоматическом рефакторинге // Труды Института системного программирования РАН. — 2013.—Vol. 25.—P. 39-50.
[40] Луцив Дмитрий Вадимович. Поиск неточных повторов в документации программного обеспечения : Диссертация на соискание научно степени кандидата физико-математических наук ; Санкт-Петербургский государственный университет. — 2018.
[41] Столпнер Лев Артемович. Обнаружение нечётких повторов в форматированных текстах : Выпускная квалификационная работа бакалавра ; Санкт-Петербургский государственный университет. — 2016.