Эх сурвалжийг харах

Поправки дерева жанров

Book Pauk 2 жил өмнө
parent
commit
dd3685990b

+ 178 - 3
server/core/genres/genresText.js

@@ -24,7 +24,7 @@ module.exports = `
 0.22 Учебники и пособия
 0.0 Неотсортированное
 #---------- 0.1 Фантастика ----------
-0.1.1 sf_history;Альтернативная история, попаданцы
+0.1.1 sf_history;Альтернативная история
 0.1.2 sf_action;Боевая фантастика
 0.1.3 sf_epic;Эпическая фантастика
 0.1.4 sf_heroic;Героическая фантастика
@@ -47,7 +47,7 @@ module.exports = `
 0.1.231 sf_mystic;Мистика
 0.1.232 sf_stimpank;Стимпанк
 0.1.233 modern_tale;Современная сказка
-0.1.234 popadancy;Попаданцы
+0.1.254 popadancy;Попаданцы
 #---------- 0.2 Детективы и Триллеры ----------
 0.2.13 det_classic;Классический детектив
 0.2.14 det_police;Полицейский детектив
@@ -275,5 +275,180 @@ module.exports = `
 0.22.250 tbg_school;Школьные учебники и пособия, рефераты, шпаргалки
 0.22.251 tbg_secondary;Учебники и пособия для среднего и специального образования
 0.22.252 tbg_higher;Учебники и пособия ВУЗов
-#---------- 2021-07-22 11:35:50.469539----------
+#---------- 2022-04-28 16:16:05.605170----------
+
+#nonfb2
+#---------- Список жанров НЕ-fb2 ----------#
+0.1 study;Учебная литература
+0.1.0 study_preschool;Дошкольникам
+0.1.1 study_scool;Школьникам
+0.1.2 study_students;Студентам
+0.1.3 study_graduate;Аспирантам
+0.2 home;Дом. Быт. Досуг
+0.2.0 home_child;Дети. Книги для родителей
+0.2.1 home_health;Красота. Здоровье.
+0.2.2 home_handiwork;Рукоделие. Домоводство
+0.2.3 home_garden;Сад, огород, цветник, дизайн участка
+0.2.4 home_cooking;Кулинария
+0.2.5 home_pets;Домашние питомцы
+0.2.6 home_collecting;Коллекционирование
+0.2.7 home_sex;Любовь, эротика
+0.2.8 home_diy;Строительство, ремонт
+0.2.9 home_crafts;Увлечения. Хобби
+0.3 arts;Искусство
+0.3.0 arts_albums;Альбомы по искусству. Фотоальбомы
+0.3.1 art_visual;Изобразительное искусство. Архитектура
+0.3.2 art_sci;Искусствоведение
+0.3.3 art_film;Кино. Киноведение
+0.3.4 art_dance;Танец. Хореография
+0.3.5 art_theater;Театр. Сценическое искусство
+0.3.6 design;Дизайн
+0.4 languages;Иностранные языки
+0.4.0 lang_rus;Русский язык
+0.4.1 lag_eng;Английский язык
+0.4.1.0 lang_eng_textbook;Учебники, пособия
+0.4.1.1 lang_eng_dict;Словари
+0.4.1.2 lang_eng_read;Домашнее чтение
+0.4.1.3 lang_eng_theor;Теория и история
+0.4.1.4 lang_eng_phrase;Разговорники
+0.4.2 lang_arab;Арабский язык
+0.4.3 lang_east;Восточные языки
+0.4.4 lang_euro;Европейские языки
+0.4.5 lang_spanish;Испанский язык
+0.4.6 lang_it;Итальянский язык
+0.4.7 lang_chi;Китайский язык
+0.4.8 lang_korean;Корейский язык
+0.4.9 lang_lat;Латинский язык
+0.4.10 lang_de;Немецкий язык
+0.4.11 lang_pl;Польский язык
+0.4.12 lang_tu;Турецкий язык
+0.4.13 lang_fr;Французский язык
+0.4.14 lang_jap;Японский язык
+0.4.15 lang_greek;Древнегреческий и другие древние языки
+0.5 computers;Компьютерная литература
+0.5.0 comp_soft_office;Офисные программы
+0.5.1 comp_db;Базы данных
+0.5.1.0 comp_db_db2;DB2
+0.5.1.1 comp_db_mysql;MySQL
+0.5.1.2 comp_db_mssqlserver;MS SQL Server
+0.5.1.3 comp_db_oracle;Oracle
+0.5.1.4 comp_db_postgresql;PostgreSQL
+0.5.1.5 comp_db_sqlite;SQLite
+0.5.1.6 comp_db_sybase;Sybase SQL
+0.5.1.7 comp_dv_ai;Искуственный интеллект
+0.5.1.8 comp_db_exp;Экспертные системы
+0.5.2 comp_design;Графика. Дизайн. Мультимедиа
+0.5.3 comp_www;Интернет и Web-страницы
+0.5.3.0 comp_www_html;HTML
+0.5.3.1 comp_www_css;CSS
+0.5.3.2 comp_www_cms;CMS
+0.5.4 comp_security;Компьютерная безопасность
+0.5.5 comp_osnet;Сети
+0.5.6 comp_soft;Компьютеры и программы
+0.5.7 comp_os;Операционные системы
+0.5.7.0 comp_os_windows;Windows
+0.5.7.1 comp_os_linux;Linux
+0.5.7.2 comp_os_unix;UNIX
+0.5.8 comp_soft_dev;Разработка ПО
+0.5.8.0 comp_soft_dev_alg;Алгоритмы
+0.5.8.1 comp_soft_dev_man;Менеджмент
+0.5.8.2 comp_soft_dev_debug;Отладка
+0.5.9 comp_soft_cad;Системы проектирования
+0.5.10 comp_programming;Языки и системы программирования
+0.5.10.0 comp_prog_delphi;Delphi
+0.5.10.1 comp_prog_pascal;Pascal
+0.5.10.2 comp_prog_c;C
+0.5.10.3 comp_prog_cpp;C++
+0.5.10.3.0 comp_prog_gnuc;GNU C++
+0.5.10.3.1 comp_prog_msvc;MS Visual Studio
+0.5.10.3.2 comp_prog_qt;Qt
+0.5.10.4 comp_prog_csharp;C#
+0.5.10.5 comp_prog_java;Java
+0.5.10.6 comp_prog_js;JavaScript
+0.5.10.7 comp_prog_php;PHP
+0.5.10.8 comp_prog_pyton;Pyton
+0.5.10.9 comp_prog_ror;Ruby
+0.5.11 comp_dig_photo;Цифровая фотография
+0.5.12 comp_exam;Сертификационные экзамены
+0.5.13 comp_hard;Железо
+0.7 nonfiction;Публицистика
+0.7.0 nonf_biography;Биографии, мемуары
+0.7.1 nonf_publicism;Публицистика
+0.7.2 nonf_criticism;Критика
+0.8 Туризм. Фото. Спорт
+0.8.0 turism;Путешествия. Туризм
+0.8.1 auto;Автомобиль
+0.8.3 fish;Рыбалка
+0.8.4 hunt;Охота
+0.8.5 sport;Спорт
+0.9 religion;Религия. Изотерика
+0.9.0 religion_esoterics;Эзотерика
+0.9.1 religion_self;Самосовершенствование
+0.9.2 religion_budda;Буддизм
+0.10 science;Наука. Техника
+0.10.0 sci_tech;Техника. Технические науки
+0.10.0.0 sci_tech_industry;Промышленность
+0.10.0.0.0 sci_tech_oil;Нефть, газ
+0.10.0.0.1 sci_tech_machinery;Машиностроение
+0.10.0.0.2 sci_metal;Металлургия
+0.10.0.0.3 sci_tech_print;Полиграфия
+0.10.0.0.4 sci_tech_chem;Химическая
+0.10.0.1 sci_radio;Радиоэлектроника, радиотехника, связь
+0.10.0.2 sci_build;Строительство
+0.10.0.3 none;Технические науки
+0.10.0.3.0 sci_tech_sopromat;Сопротивление материалов
+0.10.0.3.1 sci_tech_theormech;Теория машин
+0.10.0.3.2 sci_tech_ref;Справочники
+0.10.0.4 sci_transport;Транспорт
+0.10.0.5 sci_energy;Энергетика. Электротехника
+0.10.1 none;Естественные науки
+0.10.1.0 sci_phys;Физика
+0.10.1.0.0 sci_phys_acustics;Акустика
+0.10.1.0.1 sci_phys_quant;Квантовая механика. Теория поля
+0.10.1.0.2 sci_phys_math;Математическая физика
+0.10.1.0.3 sci_phys_molecular;Молекулярная физика. Физика газов и жидкостей
+0.10.1.0.4 sci_phys_gen;Общие работы по физике
+0.10.1.0.5 sci_phys_optics;Оптика
+0.10.1.0.6 sci_phys_theor;Теоретическая физика
+0.10.1.0.7 sci_phys_thermo;Термодинамика и статистическая физика
+0.10.1.0.8 sci_phys_plasma;Физика плазмы
+0.10.1.0.9 sci_phys_nuclear;Физика атомного ядра и элементарных частиц
+0.10.1.0.10 sci_phys_solidstate;Физика твердого тела. Кристаллография
+0.10.1.0.11 sci_phys_em;Электричество и магнетизм
+0.10.1.0.12 sci_phys_ref;Энциклопедии, справочники, словари по физике
+0.10.1.1 sci_chem;Химические
+0.10.1.1.0 sci_hem_general;Общая химия
+0.10.1.1.1 sci_orgchem;Органическая химия
+0.10.1.1.2 sci_anachem;Аналитическая химия
+0.10.1.1.3 sci_physchem;Физическая химия
+0.10.1.2 none;Географические
+0.10.1.3 sci_biology;Биологические
+0.10.1.3.0 sci_biophys;Биофизика
+0.10.1.4 sci_math;Математика
+0.10.2 none;Ветеринария. Животноводство. Сельское хозяйство
+0.10.3 sicial;Общественные и гуманитарные науки
+0.10.3.0 sicial_var;Военное дело. Оружие. Спецслужбы
+0.10.3.1 sicial_hist;История. Археология. Этнография
+0.10.3.2 sicial_lit;Литературоведение. Фольклор
+0.10.3.3 sicial_ped;Педагогика
+0.10.3.4 sicial_pol;Политика
+0.10.3.5 sicial_law;Право. Юриспруденция
+0.10.3.6 sicial_psi;Психология
+0.10.3.7 sicial_sicial;Социология
+0.10.3.8 sicial_smi;Средства массовой информации. Книжное дело
+0.10.3.9 sicial_stat;Статистика. Демография
+0.10.3.10 sicial_phy;Философия
+0.10.3.11 sicial_lang;Языкознание. Филологические науки
+0.11 sci_medicine;Медицина
+0.11.0 sci_medicine_alternative;Нетрадиционная медицина
+0.12 reference;Справочная литература
+0.12.0 ref_encyc;Энциклопедии
+0.12.1 ref_dict;Словари
+0.12.2 ref_ref;Справочники
+0.12.3 ref_guide;Руководства
+0.12.4 geo_guides;Путеводители
+0.13 periodic;Периодика
+0.13.0 periodic_newspaper;Газеты
+0.13.1 periodic_mag;Журналы
+0.0 none;Неотсортированное
 `;

+ 43 - 19
server/core/genres/index.js

@@ -1,13 +1,20 @@
 const genresText = require('./genresText.js');
 const genres = [];
+const nonfb2Genres = [];//костылики
+let nonfb2 = false;//костылики
 
 const sec2index = {};
 const lines = genresText.split('\n').map(l => l.trim());
 
 let index = 0;
+
 let other;//прочее в конец
+const names = new Set();
 
 for (const line of lines) {
+    if (line.indexOf('#nonfb2') == 0)
+        nonfb2 = true;
+
     if (!line || line[0] == '#')
         continue;
 
@@ -22,32 +29,49 @@ for (const line of lines) {
 
     let name = line.substring(p + 1).trim();
 
-    if (num.length < 3) {//раздел
-        if (section == '0.20') {//прочее
-            other = {name, value: []};
-        } else {
-            if (sec2index[section] === undefined) {
-                if (!genres[index])
-                    genres[index] = {name, value: []};
-                sec2index[section] = index;
-                index++;
+    if (!nonfb2) {
+        if (num.length < 3) {//раздел
+            if (section == '0.20') {//прочее
+                other = {name, value: []};
+            } else {
+                if (sec2index[section] === undefined) {
+                    if (!genres[index])
+                        genres[index] = {name, value: []};
+                    sec2index[section] = index;
+                    index++;
+                }
             }
-        }
-    } else {//подраздел
-        const n = name.split(';').map(l => l.trim());
+        } else {//подраздел
+            const n = name.split(';').map(l => l.trim());
+            names.add(n[0]);
 
-        if (section == '0.20') {//прочее
-            other.value.push({name: n[1], value: n[0]});
-        } else {
-            const i = sec2index[section];
-            if (i !== undefined) {
-                genres[i].value.push({name: n[1], value: n[0]});
+            if (section == '0.20') {//прочее
+                other.value.push({name: n[1], value: n[0]});
+            } else {
+                const i = sec2index[section];
+                if (i !== undefined) {
+                    genres[i].value.push({name: n[1], value: n[0]});
+                }
             }
         }
+    } else {
+        const n = name.split(';').map(l => l.trim());
+
+        if (!names.has(n[0]))
+            nonfb2Genres.push({name: n[1], value: n[0]});
+
+        names.add(n[0]);
     }
 }
 
-if (other)
+if (other) {
+    if (nonfb2Genres.length) {
+        other.value = other.value.concat(nonfb2Genres);
+    }
+
     genres.push(other);
+}
+
+//console.log(JSON.stringify(genres));
 
 module.exports = genres;