Giter VIP home page Giter VIP logo

wordsfromwords's Introduction

WordsFromWords

Немного кода по мотивам мобильной игры "Слова из Слова".

Примеры для отгадывания собираются полностью автоматически. Поскольку абсолютно никакой ручной подкрутки примеров нет, качество деления слов на "популярные" и "редкие" оставляет желать лучшего. Но играть вполне можно =)

Поиграть

Играбельная версия здесь: https://stgatilov.github.io/WordsFromWords/playable/index.html

Чтобы набрать слово, надо кликать на большие буквы-кнопки. Когда слово набрано, надо нажать "Проверить", и если такое слово есть, то она откроется. На компьютере также можно набирать слова с клавиатуры. В качестве "подсказки" можно нажать на пустую кнопку, чтобы узнать, какая там буква.

Как собрать

Используется морфологический словарь и размеченный корпус текстов с OpenCorpora.

Морфологический словарь можно скачать здесь: dict.opcorpora.xml.bz2

Размеченный корпус текста можно скачать здесь: annot.opcorpora.xml.bz2.

Оба файла надо распаковать в корневую директорию. Далее следует запустить скрипт на Python 3 (предварительно поставить lxml с помощью pip install lxml):

python build_vocabulary_oc3.py

Этот скрипт читает распакованные XML-файлы (может занять какое-то время) и пишет в файл words.txt список слов и частоту встречаемости каждого.

Далее надо собрать C++ код find_words.cpp:

g++ find_words.cpp -O2 -o find_words

И запустить его:

find_words.exe
./find_words

Он прочитает список слов и создаст примеры для игры. В файл result.txt напишутся все найденные примеры, он используется исключительно для просмотра глазами. В файл viewer/www/data.js запишутся примеры в JSON-виде, пригодные для подключения в javascript-код.

Далее остаётся только собрать javascript-код для веб-страницы. Для этого надо установить node.js и npm. В директории viewer надо установить пакеты:

npm install

После чего собрать bundle.js:

npm run build

Теперь в www должна лежать полная собранная версия, включая data.js и bundle.js. Что играть, достаточно открыть index.html в браузере.

Послесловие

Главная проблема --- как отделить "популярные и простые" слова от "редких и сложных". Я пытался сделать это на основе частоты использования слов.

Изначально пытался даже обрабатывать дамп википедии с помощью pymorphy2, но результаты получались ужасные из-за "омонимии". Редкое и неизвестное слово часто попадало в список "популярных" из-за того, что у него есть одинаковая словоформа с каким-нибудь популярным словом. В итоге остановился на том, чтобы брать только данные OpenCorpora, на которых нет неоднозначности.

Очевидно, чтобы добиться хорошего качества примеров, необходим ручной труд: нужно брать сгенерированные примеры, просматривать все слова, и руками перебрасывать слова из популярных в редкие и наоборот. Ну или в случае уже популярной игры можно собирать телеметрию, и на основе неё адаптировать разделение слов на хорошие и плохие.

wordsfromwords's People

Contributors

stgatilov avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.