Для викисловаря: шаблон «длина слова»
Для ru.wiktionary.org : код для проверки необходимости добавления шаблона «длина слова», для каждого языка в словарной статье. На С++/Qt. Для использования нужно подключить QString и QList. Код не оптимизирован, но, учитывая скорость передачи данных по сети при редактировании, это не проблема.
-
//WikiLanguages.h
-
//By neurocod – 03.05.2009 15:59:54
-
-
#ifndef WIKILANGUAGES_H
-
#define WIKILANGUAGES_H
-
#pragma once
-
-
#include "main.h"
-
-
struct RuWiktionaryLangInfo
-
{
-
QString m_strLangCode;//пример: ru или uk
-
QString m_strLangChapterTitle;//пример: {{-ru-}} или {{-la-|{{PAGENAME}}}} – общая часть будет выглядеть как "{{-ru-"
-
QString m_strLengthTemplate;//пример: {{длина слова|6|lang=uk}} и другие варианты – см файл с исходниками.
-
};
-
-
//WikiLanguages is singleton
-
class WikiLanguages
-
{
-
public:
-
static WikiLanguages* GetInstance();
-
virtual ~WikiLanguages(void);
-
-
//Если нужно добавить шаблоны длины слова, параметр strNeededChanges будет непустой
-
void MaybeInsertWordLengthTemplates(
-
IN const QString & strArticleTitle,
-
IN const QString & strArticle,
-
OUT QString & strNeededChanges)const;
-
-
void GetIterators(
-
OUT QList<RuWiktionaryLangInfo>::const_iterator & it,
-
OUT QList<RuWiktionaryLangInfo>::const_iterator & end)const;
-
protected:
-
WikiLanguages(void);
-
static WikiLanguages* s_instance;
-
QList<RuWiktionaryLangInfo> m_listLanguages;
-
};
-
-
#endif//WIKILANGUAGES_H
-
//________________________________________________________________
-
-
//WikiLanguages.cpp : implementation file
-
//By neurocod – 03.05.2009 15:59:56
-
-
#include "WikiLanguages.h"
-
-
#ifndef FromUnicode
-
#define FromUnicode(x) (QString::fromUtf16(reinterpret_cast<const ushort *>(x)))
-
#endif
-
//________________________________________________________________
-
namespace RuWiktionary
-
{
-
QString strWordLengthTemplate(FromUnicode(L"{{длина слова|%2|lang=%1}}"));
-
//для русского языка, нужно учитывать дополнительные варианты, см ниже
-
QString strWordLengthTemplate2(FromUnicode(L"{{длина слова|%1|lang=}}"));
-
//для русского языка, этот шаблон предпочтительнее:
-
QString strWordLengthTemplate3(FromUnicode(L"{{длина слова|%1}}"));
-
}
-
//________________________________________________________________
-
WikiLanguages* WikiLanguages::s_instance = 0;
-
const char* g_arrStrWikiLangCodes[]={
-
"af",
-
"als",
-
"am",
-
"an",
-
"ang",
-
"ar",
-
"ast",
-
"ay",
-
"az",
-
"be",
-
"bg",
-
"bn",
-
"br",
-
"bs",
-
"ca",
-
"chr",
-
"co",
-
"cs",
-
"csb",
-
"cy",
-
"da",
-
"de",
-
"dv",
-
"dz",
-
"el",
-
"en",
-
"eo",
-
"es",
-
"et",
-
"eu",
-
"fa",
-
"fi",
-
"fj",
-
"fo",
-
"fr",
-
"fy",
-
"ga",
-
"gd",
-
"gl",
-
"gn",
-
"gu",
-
"gv",
-
"ha",
-
"he",
-
"hi",
-
"hr",
-
"hsb",
-
"hu",
-
"hy",
-
"ia",
-
"id",
-
"ie",
-
"ik",
-
"io",
-
"is",
-
"it",
-
"iu",
-
"ja",
-
"jbo",
-
"jv",
-
"ka",
-
"kk",
-
"kl",
-
"km",
-
"kn",
-
"ko",
-
"ks",
-
"ku",
-
"kw",
-
"ky",
-
"la",
-
"lb",
-
"li",
-
"ln",
-
"lo",
-
"lt",
-
"lv",
-
"mg",
-
"mi",
-
"mk",
-
"ml",
-
"mn",
-
"mr",
-
"ms",
-
"mt",
-
"my",
-
"na",
-
"nah",
-
"nds",
-
"ne",
-
"nl",
-
"nn",
-
"no",
-
"oc",
-
"om",
-
"pa",
-
"pl",
-
"ps",
-
"pt",
-
"qu",
-
"ro",
-
"roa-rup",
-
"ru",
-
"rw",
-
"sa",
-
"scn",
-
"sd",
-
"sg",
-
"sh",
-
"si",
-
"simple",
-
"sk",
-
"sl",
-
"sm",
-
"so",
-
"sq",
-
"sr",
-
"ss",
-
"st",
-
"su",
-
"sv",
-
"sw",
-
"ta",
-
"te",
-
"tg",
-
"th",
-
"ti",
-
"tk",
-
"tl",
-
"tn",
-
"tpi",
-
"tr",
-
"ts",
-
"tt",
-
"ug",
-
"uk",
-
"ur",
-
"uz",
-
"vi",
-
"vo",
-
"wa",
-
"wo",
-
"yi",
-
"za",
-
"zh",
-
"zh-min-nan",
-
"zu",
-
};
-
//________________________________________________________________
-
WikiLanguages::WikiLanguages(void)
-
{
-
for(int i=0;i<_countof(g_arrStrWikiLangCodes); i++)
-
{
-
QString strLang = g_arrStrWikiLangCodes[i];
-
RuWiktionaryLangInfo info;
-
info.m_strLangCode = strLang;
-
info.m_strLangChapterTitle = QString("{{-%1-").arg(strLang);
-
info.m_strLengthTemplate = RuWiktionary::strWordLengthTemplate.arg(strLang);
-
-
m_listLanguages << info;
-
}
-
}
-
-
WikiLanguages::~WikiLanguages(void)
-
{
-
}
-
-
void WikiLanguages::GetIterators(
-
OUT QList<RuWiktionaryLangInfo>::const_iterator & it,
-
OUT QList<RuWiktionaryLangInfo>::const_iterator & end)const
-
{
-
it = m_listLanguages.begin();
-
end = m_listLanguages.end();
-
}
-
-
//static
-
WikiLanguages* WikiLanguages::GetInstance()
-
{
-
if(!s_instance)
-
{
-
s_instance = new WikiLanguages();
-
}
-
return s_instance;
-
}
-
-
void WikiLanguages::MaybeInsertWordLengthTemplates(
-
IN const QString & strArticleTitle,
-
IN const QString & strArticle,
-
OUT QString & strNeededChanges)const
-
{
-
ASSERT(strNeededChanges.isEmpty());
-
QList<RuWiktionaryLangInfo>::const_iterator it = m_listLanguages.begin();
-
for(; it!=m_listLanguages.end(); it++)
-
{
-
const RuWiktionaryLangInfo & info = *it;
-
if(-1!=strArticle.indexOf(info.m_strLangChapterTitle))
-
{
-
//встрелился соответствующий язковый раздел. Шаблон присутствует?
-
int nWordLength = strArticleTitle.length();
-
QString strTemplate = QString(info.m_strLengthTemplate).arg(nWordLength);
-
bool bPresent = (-1!=strArticle.indexOf(strTemplate));
-
//для русского языка, параметр языка может быть пустым, проверить эту ситуацию отдельно
-
if(!bPresent && info.m_strLangCode=="ru")
-
{
-
strTemplate = QString(RuWiktionary::strWordLengthTemplate2).arg(nWordLength);
-
bPresent = (-1!=strArticle.indexOf(strTemplate));
-
if(!bPresent)
-
{
-
//последним заносится предпочтительный шаблон:
-
strTemplate = QString(RuWiktionary::strWordLengthTemplate3).arg(nWordLength);
-
bPresent = (-1!=strArticle.indexOf(strTemplate));
-
}
-
}
-
if(!bPresent)
-
{
-
strNeededChanges += strTemplate;
-
strNeededChanges += "\r\n";
-
}
-
}//если язык встретился
-
}//по языкам
-
}
-
//________________________________________________________________
Filed under: записи с метками Теги/метки: викисловарь, код No Comments »
« №94 Начальная схема кластера и выделение совпадений в ИНС Б2 | Home | Пояснение к рубрикам »
Leave a Reply
You must be logged in to post a comment.

