コード例 #1
0
bool KeywordFinder::findNextElement(const std::string& title, Element& foundElement) const {

	int foundPower = 0;
	std::string::size_type keywordsSize = 0;
	std::string::size_type index;

	if(title.size() < min_title_length)
	{
		return false;
	}

	std::string clean_title(title);
	clean_text(clean_title);

	for (TokenArray::const_iterator itKeywords = tokens.begin(); itKeywords != tokens.end(); ++itKeywords) {

		if ((index = clean_title.find(*itKeywords)) != std::string::npos
				&& points_to_word(clean_title, index, itKeywords->size())) {

			foundPower++;
			keywordsSize += itKeywords->length();
		}
	}

	if (foundPower > 0 && keywordsSize >= min_title_length) {

		const std::string::size_type max_length = myKeyword.length() < title.length() ? title.length() : myKeyword.length();

		keywordsSize = 100 - max_length + keywordsSize + foundPower - 1;

		if (foundElement.power < foundPower
				|| (foundElement.power == foundPower && keywordsSize > foundElement.KeywordsDiff)) {

			foundElement.power = foundPower;
			foundElement.KeywordsDiff = keywordsSize;
			return true;
		}
	}

	return false;
}
コード例 #2
0
ファイル: cong-dom-view.c プロジェクト: GNOME/conglomerate
static gchar*
get_text_for_node(CongNodePtr node)
{
	CongNodeType node_type;
	const gchar *colour_string;
	const gchar *string_colour_string;
	gchar *text = NULL;
	gchar *cleaned_text = NULL;


	node_type = cong_node_type(node);
	
	colour_string = cong_ui_get_colour_string(node_type);
	string_colour_string = "#00FF00"; /* FIXME: get this from the theme and/or GtkSourceView settings */

	switch (node_type) {
	default: g_assert_not_reached();
	case CONG_NODE_TYPE_UNKNOWN: 
		text = g_strdup(_("UNKNOWN"));
		break;
	case CONG_NODE_TYPE_ELEMENT: 
		{
			xmlAttrPtr attr_iter;
			const gchar* attname_col = cong_ui_get_colour_string(CONG_NODE_TYPE_ATTRIBUTE);
			const gchar* attval_col = string_colour_string;

			text = g_strdup_printf ("<span foreground=\"%s\">&lt;%s", 
						colour_string, 
						cong_node_get_qualified_name (node));
			
			/* Add attributes (if any): */
			for (attr_iter = node->properties; attr_iter; attr_iter=attr_iter->next) {
				gchar *attribute = g_strdup_printf(" <span foreground=\"%s\">%s=<span foreground=\"%s\">\"%s\"</span></span>",attname_col, attr_iter->name, attval_col, attr_iter->children->content);
				cong_util_append(&text, attribute);
				g_free(attribute);
			}
			cong_util_append(&text, "&gt;</span>");
		}
		break;
	case CONG_NODE_TYPE_ATTRIBUTE:
		text = g_strdup_printf("ATTRIBUTE");
		break;		
	case CONG_NODE_TYPE_TEXT:
		cleaned_text = clean_text((const gchar*)node->content);
		text = g_strdup_printf("%s \"<span foreground=\"%s\">%s</span>\"", 
				       _("Text:"), colour_string, cleaned_text);
		g_free(cleaned_text);
		break;
	case CONG_NODE_TYPE_CDATA_SECTION:
		cleaned_text = clean_text((const gchar*)node->content);
		text = g_strdup_printf("%s \"<span foreground=\"%s\">%s</span>\"", 
				       _("CDATA:"), colour_string, cleaned_text);
		g_free(cleaned_text);
		break;
	case CONG_NODE_TYPE_ENTITY_REF:
		text = g_strdup_printf("ENTITY REF: %s", node->name);
		break;
	case CONG_NODE_TYPE_ENTITY_NODE:
		text = g_strdup_printf("ENTITY");
		break;
	case CONG_NODE_TYPE_PI:
		text = g_strdup_printf("PI");
		break;
	case CONG_NODE_TYPE_COMMENT:
		cleaned_text = clean_text((const gchar*)node->content);
		text = g_strdup_printf("<span foreground=\"%s\">&lt;!-- %s --&gt;</span>", colour_string, cleaned_text);
		g_free(cleaned_text);
		break;
	case CONG_NODE_TYPE_DOCUMENT:
		{
			xmlDocPtr doc = (xmlDocPtr)node;
			text = g_strdup_printf("<span foreground=\"%s\">&lt;?xml version="
					       "<span foreground=\"%s\">\"%s\"</span>"
					       " encoding="
					       "<span foreground=\"%s\">\"%s\"</span>"
					       " standalone="
					       "<span foreground=\"%s\">\"%s\"</span>"
					       "&gt;</span>",
					       
					       colour_string,

					       string_colour_string,
					       doc->version,

					       string_colour_string,
					       doc->encoding,

					       string_colour_string,
					       (doc->standalone?"yes":"no"));
		}
		break;
	case CONG_NODE_TYPE_DOCUMENT_TYPE:
		text = g_strdup_printf("DOCUMENT TYPE");
		break;
	case CONG_NODE_TYPE_DOCUMENT_FRAG:
		text = g_strdup_printf("DOCUMENT FRAG");
		break;
	case CONG_NODE_TYPE_NOTATION:
		text = g_strdup_printf("NOTATION");
		break;
	case CONG_NODE_TYPE_HTML_DOCUMENT:
		text = g_strdup_printf("HTML DOCUMENT");
		break;
	case CONG_NODE_TYPE_DTD:
		{
			text = g_strdup_printf("&lt;!DOCTYPE %s&gt;", node->name);
			/* FIXME: show any SYSTEM/PUBLIC DTD stuff */
		}
		break;
	case CONG_NODE_TYPE_ELEMENT_DECL:
		text = g_strdup_printf("ELEMENT DECL");
		break;
	case CONG_NODE_TYPE_ATRRIBUTE_DECL:
		text = g_strdup_printf("ATTRIBUTE DECL");
		break;
	case CONG_NODE_TYPE_ENTITY_DECL:
		text = g_strdup_printf("<span>&lt;!ENTITY %s ...&gt;</span>", node->name);
		break;
	case CONG_NODE_TYPE_NAMESPACE_DECL:
		text = g_strdup_printf("NAMESPACE DECL");
		break;
	case CONG_NODE_TYPE_XINCLUDE_START:
		text = g_strdup_printf("XINCLUDE START");
		break;
	case CONG_NODE_TYPE_XINCLUDE_END:
		text = g_strdup_printf("XINCLUDE END");
		break;		
	}

	return (text);
	
}
コード例 #3
0
void KeywordFinder::splitToTokens(std::string& keyword) {

	clean_text(keyword);
	std::transform(keyword.begin(), keyword.end(), keyword.begin(), ::tolower);
	tokens = split(keyword.c_str(), ' ');
}
コード例 #4
0
ファイル: dbmanager.cpp プロジェクト: hackertron/W2L
bool check_revision(QString id , int revision_number)
{
    int pageid;

    QEventLoop eventLoop;

    // "quit()" the event-loop, when the network request "finished()"
    QNetworkAccessManager mg;
    QObject::connect(&mg, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));

    // the HTTP request
    QString url = "http://en.wikitolearn.org/api.php?action=parse&pageid="+id+"&format=json";
    QNetworkRequest re( ( url ) );
    QNetworkReply *reply = mg.get(re);
    eventLoop.exec();

    if (reply->error() == QNetworkReply::NoError) {
        //success
        //qDebug() << "Success" <<reply->readAll();
        QString   html = (QString)reply->readAll();
        QJsonDocument jsonResponse = QJsonDocument::fromJson(html.toUtf8());

        QJsonObject jsonObj = jsonResponse.object();

        int  revid = jsonObj["parse"].toObject()["revid"].toInt();
        pageid = jsonObj["parse"].toObject()["pageid"].toInt();
        QString page_title = jsonObj["parse"].toObject()["title"].toString();
        qDebug() << jsonObj["parse"].toObject()["title"].toString();


        if(revision_number == revid)
        {
            delete reply;
            return true ;
        }
        else
        {
            qDebug() << "update page";
            QString text = jsonObj["parse"].toObject()["text"].toObject()["*"].toString();
            text = clean_text(text);
            bool del = del_from_db(id,revid);
            //check if deletion was successfull
            if(del == true)
            {
                qDebug() << "deletion from DB done";
            }
            else
            {
                qDebug() << "error in deletion from DB";
            }
            QString pid = QString::number(pageid);
            del_file(pid);
            save_file( text ,  pageid ,  revision_number , page_title);


        }

    }

    return true;

}
コード例 #5
0
ファイル: dbmanager.cpp プロジェクト: hackertron/W2L
QString dbmanager::add(QString p_url)
{

    QString text , page_title ;
    int pageid , revid;

    QString requested_url = "http://en.wikitolearn.org/api.php?action=parse&page="+p_url+"&format=json";

    // create custom temporary event loop on stack
    QEventLoop eventLoop;

    // "quit()" the event-loop, when the network request "finished()"
    QNetworkAccessManager mgr;
    QObject::connect(&mgr, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));

    // the HTTP request
    QNetworkRequest req( requested_url );
    QNetworkReply *reply = mgr.get(req);
    eventLoop.exec();

    if (reply->error() == QNetworkReply::NoError) {
        //success
        //qDebug() << "Success" <<reply->readAll();
        QString   html = (QString)reply->readAll();
        QJsonDocument jsonResponse = QJsonDocument::fromJson(html.toUtf8());

        QJsonObject jsonObj = jsonResponse.object();
        /********************************************************************************
         *  API returns JSON . JSON needs to be parsed to get the contents from it      *
         *  contents that we need are  html contents , pageid , revision number of page *
         * text  == contains the html content of the specified page                     *
         * pageid == contains the page id of the page .                                 *
         * revid == contains revision number of the page                                *
         * page_title == contains the title of the page                                 *
         * ******************************************************************************
         */

        text = jsonObj["parse"].toObject()["text"].toObject()["*"].toString();
        pageid = jsonObj["parse"].toObject()["pageid"].toInt();
        revid = jsonObj["parse"].toObject()["revid"].toInt();
        page_title = jsonObj["parse"].toObject()["title"].toString();

        //clean the result from the API
        text = clean_text(text);
        //  qDebug() << text;
        qDebug() <<pageid;

        delete reply;
    }

    else {
        //failure
        qDebug() << "Failure" <<reply->errorString();
        delete reply;
    }

    // ******************* save file here  ****************

    save_file(text , pageid , revid , page_title);




    static auto i = 0;
    return QString("%1: %2").arg(++i).arg(p_url);


}