<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Od Informacji do Wiedzy</title>
	<atom:link href="http://profind.pl/feed/" rel="self" type="application/rss+xml" />
	<link>http://profind.pl</link>
	<description>Blog o informacjach na temat informacji i wiedzy</description>
	<lastBuildDate>Fri, 17 Feb 2012 12:23:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Artykuły</title>
		<link>http://profind.pl/2012/02/17/artykuly-2/</link>
		<comments>http://profind.pl/2012/02/17/artykuly-2/#comments</comments>
		<pubDate>Fri, 17 Feb 2012 12:22:28 +0000</pubDate>
		<dc:creator>Marcin</dc:creator>
				<category><![CDATA[Dziennik badań]]></category>
		<category><![CDATA[Ogólne zapiski kusownika it-yka]]></category>
		<category><![CDATA[analiza danych tekstowych]]></category>
		<category><![CDATA[analiza raportów]]></category>
		<category><![CDATA[artykuły]]></category>
		<category><![CDATA[dzielenie tekstu na segmenty]]></category>
		<category><![CDATA[dzielenie tekstu na zdania]]></category>
		<category><![CDATA[eksplroacja danych tekstowych]]></category>
		<category><![CDATA[ekstrakcja informacji]]></category>
		<category><![CDATA[ERP]]></category>
		<category><![CDATA[HSWD]]></category>
		<category><![CDATA[information extraction]]></category>
		<category><![CDATA[segmentacja tekstu]]></category>
		<category><![CDATA[segmentator regułowy]]></category>
		<category><![CDATA[segmentator regułowy tekstu]]></category>
		<category><![CDATA[SWD]]></category>
		<category><![CDATA[systemu planowania zasobów]]></category>
		<category><![CDATA[systemy wspomagania decyzji i ERP]]></category>
		<category><![CDATA[text mining]]></category>

		<guid isPermaLink="false">http://profind.pl/?p=1119</guid>
		<description><![CDATA[Ostatnio większość czasu spędzam nad szlifowaniem rozprawy i opisem rezultatów badań. Uzbierało się trochę tego. W między czasie widzę, że spływają recenzje wysłanych artykułów do wydawnictw. Ostatnio ukazał się artykuł &#8211; Marcin Mirończuk, Tadeusz Maciak Wykorzystanie komponentów platformy ERP do budowy drugiej generacji hybrydowego systemu wspomagania decyzji dla PSP. Metody Informatyki Stosowanej, 3/2011. Zainteresowanych tematyką zapraszam do działu Abstrakty [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Ostatnio większość czasu spędzam nad szlifowaniem rozprawy i opisem rezultatów badań. Uzbierało się trochę tego. W między czasie widzę, że spływają recenzje wysłanych artykułów do wydawnictw. Ostatnio ukazał się artykuł &#8211; Marcin Mirończuk, Tadeusz Maciak <em>Wykorzystanie komponentów platformy ERP do budowy drugiej generacji hybrydowego systemu wspomagania decyzji dla PSP<em>.</em> Metody Informatyki Stosowanej, 3/2011. </em>Zainteresowanych tematyką zapraszam do działu <a title="Abstrakty" href="http://profind.pl/publikacje/abstrakty/">Abstrakty</a> lub <a title="Publikacje…" href="http://profind.pl/publikacje/">Publikacje</a>, gdzie znajdują się streszczenia oraz linki do wersji elektronicznych ww. artykułów.</p>
]]></content:encoded>
			<wfw:commentRss>http://profind.pl/2012/02/17/artykuly-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Laboratoria nr 16 program nr 1</title>
		<link>http://profind.pl/2012/01/12/laboratoria-nr-16-program-nr-1/</link>
		<comments>http://profind.pl/2012/01/12/laboratoria-nr-16-program-nr-1/#comments</comments>
		<pubDate>Thu, 12 Jan 2012 17:21:55 +0000</pubDate>
		<dc:creator>Marcin</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[boost]]></category>
		<category><![CDATA[c++ tamplate]]></category>
		<category><![CDATA[c/c++]]></category>
		<category><![CDATA[inteligentne wskaźniki]]></category>
		<category><![CDATA[programowanie w c]]></category>
		<category><![CDATA[przykładowe programy]]></category>
		<category><![CDATA[smart pointer]]></category>

		<guid isPermaLink="false">http://profind.pl/2012/01/12/laboratoria-nr-16-program-nr-1/</guid>
		<description><![CDATA[Poniżej przedstawiam zrefaktoryzwoany, przedstawiony wcześniej szkielet kodu aplikacji do przetwarzania tekstów (Labolatorium nr 15) . Aktualnie zaprezentowane zostały tematy związane z takimi zagadnieniami jak: - biblioteka boost i wykorzystanie inteligentnych wskaźników (rozwiązanie problemów z ewentualnymi wyciekami pamięci np. przy wywoływaniu wyjątków), - biblioteka standardowa STL, - modyfikator const. W miarę czasu postaram przedstawić zagadnienia związane [...]]]></description>
			<content:encoded><![CDATA[<p align="justify">Poniżej przedstawiam zrefaktoryzwoany, przedstawiony wcześniej szkielet kodu aplikacji do przetwarzania tekstów (Labolatorium nr 15) . Aktualnie zaprezentowane zostały tematy związane z takimi zagadnieniami jak:</p>
<p align="justify">- biblioteka boost i wykorzystanie inteligentnych wskaźników (rozwiązanie problemów z ewentualnymi wyciekami pamięci np. przy wywoływaniu wyjątków),</p>
<p align="justify">- biblioteka standardowa STL,</p>
<p align="justify">- modyfikator const.</p>
<p align="justify">W miarę czasu postaram przedstawić zagadnienia związane z tampletami (<em>ang. tamplates</em>) stosowanymi do programowania ogólnego oraz wykorzystanie wyrażeń regularnych w budowaniu macierzy wyrażeń (<em>ang. term matrix</em>). Dobre wprowadzenie do biblioteki boost i wyrażeń regularnych zawiera <a href="http://www.wykop.pl/ramka/93516/boost-regex-czyli-regexpy-dla-programistow-c/">Przemoc&#8217;s wiki</a>. W dalszej kolejności planowane jest też pokazanie sposobów testowania kodu (<em>ang. test unity</em>) zamiast stosowania testów wewnątrz funkcji <em>main()</em>.</p>
<p align="justify">Na koniec, a może nawet w następnym poście dotyczącym C/C++, chciałbym przedstawić zagadnienie związane z łączeniem PHP z C++. Maszyna zenda jest dość ciężka do opanowania (wiele pośrednich makr, dokumentacji etc.). Opanowanie jej zajmuje trochę czasu. Powstało jednakże bardziej elastyczne narzędzie w postaci <a href="www.swig.org/Doc1.3/Php.html">SWIG</a> w którym na pierwszy rzut oka zadanie to wydaje się o wiele elastyczniejsze i łatwiejsze niż poprzez hackowanie bezpośrednio zenda. Z rozwiązaniem tym pierwszy raz spotkałem się w <a href="http://www.linux-magazine.pl/index.php/layout/set/print/issues/92">Linux Magazine</a> (artykuł pt. “PHP z C++”)<strong> </strong>a następnie na blogu IBMa&#160; Build <a href="http://www.ibm.com/developerworks/opensource/library/os-php-swig/">PHP extensions with SWIG</a>, gdzie <a href="http://www.ibm.com/developerworks/opensource/library/os-php-swig/#author1">Martin Streicher</a>wyjaśnia w bardzo przystępny sposób jak pisać rozszerzenia używając C/C++ do PHP.</p>
<p><span id="more-1101"></span>
<p align="justify">Kod zrefaktoryzwoanej aplikacji wykorzystujący utworzone interfejsy przedstawia listing poniżej:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:738d76c8-380b-41d3-b1cf-9c0f8ca630ed" class="wlWriterEditableSmartContent">
<pre class="brush: cpp; gutter: true; first-line: 1; tab-size: 4;  toolbar: false;  width: 518px; height: 439px;" style=" width: 518px; height: 439px;overflow: auto;">//============================================================================
// Name        : agencyText.cpp
// Author      : Marcin Mirończuk
// Version     : 1.0
// Copyright   : GPL
// Description : The agency to text retrive
//============================================================================

/**
 * Rejestracja bibliotek
 */
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;
#include &quot;textAgent.h&quot;

#include &quot;boost/scoped_ptr.hpp&quot;

/**
 * Rejestracja przestrzeni nazw
 */
using namespace std;
using namespace ta;
using namespace boost;

/**
 * Definicja typ&#243;w
 * Wstep do tworzenia szablonow @see http://pl.wikibooks.org/wiki/C++/Szablony_klas
 */
typedef ta::textAgent agentInt;

/**
 * Program glowny
 */
int main(int argc, char** argv) {

	/**
	 * Wystartowanie kilku agentow dynamicznych oraz statycznych, nazwanych jak i nienazwanych (anonimowych)
         * Zastosowanie inteligentnych wskaznikow z biblioteki boost do zarzadzania czasem zycia obiektow
	 */
	agentInt agentStatyczny(1220, 1, &quot;przetwarzacz tekstu 1&quot;, &quot;Agent T1&quot;);
	agentInt niezweryfikowanyAgentStatyczny;

	boost::scoped_ptr&lt;agentInt&gt; agentDynamiczny(new agentInt(12330, 2, &quot;przetwarzacz tekstu 2&quot;, &quot;Agnet T2&quot;));
	boost::scoped_ptr&lt;agentInt&gt; niezweryfikowanyAgentDynamiczny(new agentInt());

	try {

		/**
		 * Pokazanie informacji o rezydujacych agentach
		 */
		cout &lt;&lt; &quot;Zarejestrowany agent i jego dane:&quot; &lt;&lt; endl;
		agentStatyczny.showData();

		cout &lt;&lt; endl;

		cout &lt;&lt; &quot;Agent oczekujacy na rejestracje:&quot; &lt;&lt; endl;
		niezweryfikowanyAgentStatyczny.showData();

		cout &lt;&lt; endl;

		cout &lt;&lt; &quot;Agent dynamiczny zarejstrowany:&quot; &lt;&lt; endl;
		agentDynamiczny-&gt;showData();

		cout &lt;&lt; endl;

		cout &lt;&lt; &quot;Agent dynamiczny niezweryfikowany:&quot; &lt;&lt; endl;
		niezweryfikowanyAgentDynamiczny-&gt;showData();

		cout &lt;&lt; endl;

		/**
		 * Rejestracja modulu (przybornika) do przetwarzania tekstow
                 * Dodatkowe testy przybornika
		 */
		tt::textTool tt;
                tt::textTool ttTest;

                cout &lt;&lt; &quot;Testowanie tollboksa do przetwarzania tekstu: &quot; &lt;&lt; endl;

                ttTest.extractSegments(&quot;A ja mam kota. I wiecej tekstu.&quot;);
                ttTest.showSegments();

                cout &lt;&lt; endl;

		/**
		 * Rejestracja przybornika dla agenta dynamicznego
		 */
		agentDynamiczny-&gt;rejestrTextTool(tt);
		agentDynamiczny-&gt;rejestrTextTool().extractSegments(&quot;Ala ma kota.&quot;);

		cout &lt;&lt; &quot;Ilosc zliczonych segmentow: &quot; &lt;&lt;  agentDynamiczny-&gt;rejestrTextTool().getCountSegments() &lt;&lt; endl;
		cout &lt;&lt; &quot;Pokaz jakie segmenty zliczyles: &quot; &lt;&lt; endl;
		agentDynamiczny-&gt;rejestrTextTool().showSegments();

		cout &lt;&lt; endl;

		/**
		 * Rejestracja przybornika dla agenta statycznego
		 */
                agentStatyczny.rejestrTextTool(tt);
		agentStatyczny.rejestrTextTool().extractSegments(&quot;A ja mam kota. I wiecej tekstu.&quot;);

                cout &lt;&lt; &quot;Ilosc zliczonych segmentow: &quot; &lt;&lt; agentStatyczny.rejestrTextTool().getCountSegments() &lt;&lt; endl;
		cout &lt;&lt; &quot;Pokaz jakie segmenty zliczyles: &quot; &lt;&lt; endl;
		agentStatyczny.rejestrTextTool().showSegments();

		cout &lt;&lt; endl;

		cout &lt;&lt; &quot;Testowanie usowania spacji:&quot; &lt;&lt; endl;

		std::string testString1 = &quot; kota &quot;;
		cout &lt;&lt; &quot;- Tekst przed filtracja: &quot; &lt;&lt; testString1 &lt;&lt; endl;
		cout &lt;&lt; &quot;- Filtracja: &quot; &lt;&lt; &quot;Tekst odfiltrowany: &quot; &lt;&lt; agentStatyczny.rejestrTextTool().stripWhiteSpace(testString1) &lt;&lt; endl;
		cout &lt;&lt; &quot;- Filtracja: &quot; &lt;&lt; &quot;Tekst pierwotny &quot; &lt;&lt; testString1 &lt;&lt; endl;

		std::string *pTestString1 = &amp;testString1;
		cout &lt;&lt; &quot;- Tekst przed filtracja wskaznik / zmienna: &quot; &lt;&lt; *pTestString1 &lt;&lt; &quot; / &quot; &lt;&lt; testString1 &lt;&lt; endl;
		agentStatyczny.rejestrTextTool().stripWhiteSpace(pTestString1);
		cout &lt;&lt; &quot;- Filtracja: &quot; &lt;&lt; &quot;Tekst odfiltrowany &quot; &lt;&lt; *pTestString1 &lt;&lt; endl;
		cout &lt;&lt; &quot;- Filtracja: &quot; &lt;&lt; &quot;Tekst pierwotny &quot; &lt;&lt; testString1 &lt;&lt; endl;

		cout &lt;&lt; endl;

		cout &lt;&lt; &quot;Testowanie tokenizacji:&quot; &lt;&lt; endl;
		std::string testString2 = &quot;Ala ma kota. A kot ma na imie Ala.&quot;;
		cout &lt;&lt; &quot;- Tekst podlegajacy tokenizacji: &quot; &lt;&lt; testString2 &lt;&lt; endl;
		agentStatyczny.rejestrTextTool().tokenize(testString2);
		cout &lt;&lt; &quot;- Ilosc tokenow: &quot; &lt;&lt;  agentStatyczny.rejestrTextTool().getCountTokens() &lt;&lt; endl;
		cout &lt;&lt; &quot;- Ilosc unikatowych tokenow: &quot; &lt;&lt;  agentStatyczny.rejestrTextTool().getCountUniqueTokens();

                cout &lt;&lt; endl;

                niezweryfikowanyAgentDynamiczny-&gt;rejestrTextTool();

	} catch (std::string exception) {
                cout &lt;&lt; endl;
		cout&lt;&lt;&quot;Wyjatek: &quot;&lt;&lt; exception;
	}

	return 0;
}
</pre>
<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></div>
<p>Interfejs agenta który rejestruje moduł do przetwarzania tekstu i za pośrednictwem którego odbywają się wszelkie modyfikacja przedstawia listing poniżej:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:3bd32f71-482b-463d-b866-d3b1658caa1a" class="wlWriterEditableSmartContent">
<pre class="brush: cpp; gutter: true; first-line: 1; tab-size: 4;  toolbar: false;  width: 518px; height: 439px;" style=" width: 518px; height: 439px;overflow: auto;">/*
 * textAgent.h
 *
 *  Created on: 21-12-2011
 *  Author: Marcin Mirończuk
 *  Licenc: GPL
 *
 *  Klas modelujaca podstawowe elementy agenta do przetwarzania tekstu.
 *  Agent ma mozliwosc rejestrowania u siebie modulu do przetwarzania tekstu za omoca ktorego przetwarza tekst.
 *
 * @note::
 * + Metody [nazwaMetody]get() const nie zmieniaja stanu obiektow na zecz ktorych sa wywolywane.
 *   (pola tylko do odczytu)
 * + Czesc metod [nazwaMetody]get() moze byc wywolana inline
 *
 */

#include &lt;string&gt;
#include &quot;textTool.h&quot;

#ifndef TA_H_
#define TA_H_

/**
 * Definicja przestrzeni nazw
 */
namespace ta {

	/**
	 *  Definicja klasy
	 */
	class textAgent {

		/**
		 * Skladowe i metody prywatne klasy
		 */
		private:

			/**
			 * @type int timeCreate Czas w sekundach  Unix timestamp
			 */
			int timeCreate;

			/**
			 * @type float priority Priorytet agebta
			 */
			int priority;

			/**
			 * @type string task Zadanie/praca do wykonania przez agebta
			 */
			std::string task;

			/**
			 * @type string name Nazwa agenta
			 */
			std::string name;

			/**
			 * @type bool isTextTool Flaga rejestracji modulu tekstu
			 */
			bool isTextTool;

			/**
			 * @type textTool textTool Uchwyt do modulu przetwarzajacego tekst
			 */
			tt::textTool textTool;

		/**
		 * Skladowe i metody publiczne klasy
		 */
		public:

			/**
			 * Konstruktor podstawowy domyslny
			 */
			textAgent();

			/**
			 * Konstruktor rozszerzony
			 */
			textAgent(int ptimeCreate, int ppriority, std::string ptask, std::string pname);

			/**
			 * Pobranie wieku agenta
			 *
			 * @return float
			 */
			int getTimeCreate() const;

			/**
			 * Pobranie wagi agenta
			 *
			 * @return float
			 */
			int getPriority() const;

			/**
			 * Pobranie zadania agenta
			 *
			 * @return string
			 */
			std::string getTask() const;

			/*
			 * Pobranie nazwy agenta
			 *
			 * @return string
			 */
			std::string getName() const;

			/**
			 * Pokazanie danych o agencie
			 *
			 * @return void
			 */
			void showData() const;

			/**
			 * Rejestracja modulu do przetwarzania tekstu
			 *
			 * @return tt::textTool
			 */
			const tt::textTool &amp; rejestrTextTool(tt::textTool tt);

			/**
			 * Rejestracja, pobranie modulu do przetwarzania tekstu.
			 *
			 * @return tt::textTool
			 * @thorw exception
			 */
			tt::textTool &amp; rejestrTextTool() throw(std::string);

                        /**
                         * @see ta::textAgent::rejestrTextTool()
                         *
			 * @return tt::textTool
			 * @thorw exception
                         */
                        tt::textTool &amp; getTextTool();

			/**
			 * Destruktor
			 */
			virtual ~textAgent();
	};

} /* namespace textagent */
#endif /* TA_H_ */
</pre>
<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></div>
<p>Interfejs programu (modułu) do przetwarzania strumienia danych tekstowych przedstawia listing poniżej:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:ee8afcff-5691-4d3e-b541-e65060fcdafd" class="wlWriterEditableSmartContent">
<pre class="brush: cpp; gutter: true; first-line: 1; tab-size: 4;  toolbar: false;  width: 518px; height: 439px;" style=" width: 518px; height: 439px;overflow: auto;">/*
 * textAgent.cpp
 *
 *  Created on: 21-12-2011
 *  Author: Marcin Mirończuk
 *  Licenc: GPL
 *
 *  Implementacja interfejsu agenta do przetwarzania tekstu @see textAgent.h
 *
 */

#include &lt;iostream&gt;
#include &quot;textAgent.h&quot;
#include &quot;textTool.h&quot;

namespace ta {

	textAgent::textAgent() {
		this-&gt;timeCreate = 0;
		this-&gt;priority = 0;
		this-&gt;task = &quot;unknown&quot;;
		this-&gt;name = &quot;inkognito&quot;;

		this-&gt;isTextTool = false;
	}

	textAgent::textAgent(int ptimeCreate, int ppriority, std::string ptask, std::string pname) {
		this-&gt;timeCreate = ptimeCreate;
		this-&gt;priority = ppriority;
		this-&gt;task = ptask;
		this-&gt;name = pname;

		this-&gt;isTextTool = false;
	}

	int textAgent::getTimeCreate() const {
		return this-&gt;timeCreate;
	}

	int textAgent::getPriority() const {
		return this-&gt;priority;
	}

	std::string textAgent::getTask() const {
		return this-&gt;task;
	}

	std::string textAgent::getName() const {
		return this-&gt;name;
	}

	void textAgent::showData() const {
		std::cout &lt;&lt; &quot;Time create: &quot; &lt;&lt; this-&gt;timeCreate &lt;&lt; std::endl;
		std::cout &lt;&lt; &quot;Priority: &quot; &lt;&lt; this-&gt;priority &lt;&lt; std::endl;
		std::cout &lt;&lt; &quot;Name: &quot; &lt;&lt; this-&gt;name &lt;&lt; std::endl;
		std::cout &lt;&lt; &quot;Task: &quot; &lt;&lt; this-&gt;task &lt;&lt; std::endl;
	}

	const tt::textTool &amp; textAgent::rejestrTextTool(tt::textTool tt) {
		if(this-&gt;isTextTool == false) {
			this-&gt;textTool = tt;

			this-&gt;isTextTool = true;

			return this-&gt;textTool;
		} else {
			return this-&gt;textTool;
		}
	}

	tt::textTool &amp; textAgent::rejestrTextTool() throw(std::string) {
		if(this-&gt;isTextTool == false) {
			std::string exception = &quot;Unregister text tool!&quot;;

			throw exception;
		} else {
			return this-&gt;textTool;
		}
	}

        tt::textTool &amp; textAgent::getTextTool() {
            return this-&gt;rejestrTextTool();
        }

	textAgent::~textAgent() {
	}

} /* namespace ta */
</pre>
<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></div>
<p>Implementację interfejsu programu do przetwarzania tekstu zawiera listing poniżej:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:ebd7f99d-caf3-4f5b-a8b3-1f17a4f58386" class="wlWriterEditableSmartContent">
<pre class="brush: cpp; gutter: true; first-line: 1; tab-size: 4;  toolbar: false;  width: 518px; height: 439px;" style=" width: 518px; height: 439px;overflow: auto;">/*
 * textTool.h
 *
 *  Created on: 21-12-2011
 *  Author: Marcin Mirończuk
 *  Licenc: GPL
 *
 *  Klas modelujaca modul (przybornik) do przetwarzania tekstu.
 *
 * @note::
 * + Metody [nazwaMetody]get() const nie zmieniaja stanu obiektow na rzecz ktorych sa wywolywane.
 *   (pola tylko do odczytu)
 * + Czesc metod [nazwaMetody]get() moze byc wywolana inline
 * + Zabezpieczenie funkcji zwracajacych referencje modyfikatorem const tj.
 *   Uniemozliwienie wywolan typu ttTest.extractSegments(&quot;&quot;) = temp;
 *   @see http://rab.ict.pwr.wroc.pl/~kreczmer/po/materialy/referencje.pdf
 *
 */

#include &lt;map&gt;
#include &lt;vector&gt;
#include &lt;string&gt;

#ifndef TT_H_
#define TT_H_

/**
 * Definicja przestrzeni nazw
 */
namespace tt {

	/**
	 *  Definicja klasy
	 */
	class textTool {

		/**
		 * Skladowe i metody prywatne klasy
		 */
		private:

			/**
			 * @type vector&lt;string&gt; segment Wektor segmentow
			 */
			std::vector&lt;std::string&gt; segments;

			/**
			 * @type vector&lt;string&gt; tokens Wektor tokenow (wyrazen)
			 */
			std::vector&lt;std::string&gt; tokens;

			/**
			 * @type vector&lt;string&gt; uniqueTokens Wektor unikalnych tokenow (wyrazen)
			 */
			std::vector&lt;std::string&gt; uniqueTokens;

			/**
			 * @type vector&lt;string, int&gt; tokensFrequ Tablica klucz=wartosc czestotliwosci wyrazen
			 */
			std::map&lt;std::string, int&gt; tokensFrequ;

			/**
			 * Usowanie duplikatow wyrazen z wektora wyrazen
			 *
			 * @see http://learningcppisfun.blogspot.com/2008/04/remove-duplicates-from-vector.html
			 * @see http://stackoverflow.com/questions/1041620/most-efficient-way-to-erase-duplicates-and-sort-a-c-vector
			 *
			 * @param vector&lt;string&gt; vec
			 *
			 * @return vector&lt;string&gt;
			 */
			const std::vector&lt;std::string&gt; &amp; removeDuplicates(std::vector&lt;std::string&gt; vec);

		public:

			/**
			 * Domyslny konstruktor
			 */
			textTool();

			/**
			 * Wydobywanie segmentow z tekstu.
			 *
			 * @param string &amp;text
			 *
			 * @return vector&lt;string&gt;
			 */
			const std::vector&lt;std::string&gt; &amp; extractSegments(const std::string &amp;text);

			/**
			 * Pobranie ilosci wydobytych segmentow z tekstu.
                         *
			 * @return int
			 */
			int getCountSegments() const;

			/**
			 * Pokazanie wydobytych segmentow z tekstu.
			 *
			 * @return void
			 */
			void showSegments() const;

			/**
			 * Usuniecie spacji z poczatku jak i z konca lancucha znakow.
			 *
			 * @param string text
			 *
			 * @return string
			 */
			std::string stripWhiteSpace(std::string text);

			/**
			 * Przeciazona wersja usuniecia spacji z poczatku jak i z konca lancucha znakow.
			 *
			 * @param string *text
			 *
			 * @return void
			 */
			void stripWhiteSpace(std::string *text);

			/**
			 * Kalkulacja, wyznaczanie macierzy czetotliwosci wystepowania wyrazen w pojedynczym dokumencie tekstowym.
			 *
			 * @param string &amp;text
			 *
			 * @return map&lt;string, int&gt;
			 */
			const std::map&lt;std::string, int&gt; &amp; computeTokensFrequ(const std::string &amp;text);

			/**
			 * Tokenizacja tekstu tj. rozbicie tekstu na wektor wyrazen.
			 * @see http://oopweb.com/CPP/Documents/CPPHOWTO/Volume/C++Programming-HOWTO-7.html
			 *
			 * @param string &amp;text
			 *
			 * @return vector&lt;string&gt;
			 */
			const std::vector&lt;std::string&gt; &amp; tokenize(const std::string &amp;text);

			/**
			 * Pobranie ilosci wyrazen.
			 *
			 * @return int
			 */
			int getCountTokens() const;

			/**
			 * Pobranie ilosci unikalnych wyrazen.
			 *
			 * @return int
			 */
			int getCountUniqueTokens();

			/**
			 * Domyslny destruktor
			 */
			virtual ~textTool();
		};

	} /* namespace tt */
#endif /* TT_H_ */
</pre>
<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></div>
<p>Implementację powyżej zaprezentowanego interfejsu programu do przetwarzania tekstu zawiera listing poniżej:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:4f576022-a68a-4456-a41a-b88736a07019" class="wlWriterEditableSmartContent">
<pre class="brush: cpp; gutter: true; first-line: 1; tab-size: 4;  toolbar: false;  width: 518px; height: 439px;" style=" width: 518px; height: 439px;overflow: auto;">/*
 * textTool.cpp
 *
 *  Created on: 21-12-2011
 *  Author: Marcin Mirończuk
 *  Licenc: GPL
 *
 *  Implementacja interfejsu modulu do przetwarzania tekstu @see textTool.h
 *
 */

#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;sstream&gt;
#include &lt;algorithm&gt;
#include &quot;textTool.h&quot;

namespace tt {

	textTool::textTool() {
	}

	/**
	 * Bardzo naiwna, prezentacyja wersji algorytmu do rozbijania tekstu na segmenty (zdania)
	 */
	const std::vector&lt;std::string&gt; &amp; textTool::extractSegments(const std::string &amp;text) {

                std::string tempSegment;

		for(int i = 0; i &lt; text.length(); i++) {
			if(text[i] == '.' || text[i] == '?' || text[i] == '!') {
				tempSegment = (std::string) tempSegment;
				this-&gt;segments.push_back(this-&gt;stripWhiteSpace(tempSegment));
				tempSegment.clear();
			} else {
				tempSegment += text[i];
			}
		}

		return this-&gt;segments;
	}

	int textTool::getCountSegments() const {
		return this-&gt;segments.size();
	}

	std::string textTool::stripWhiteSpace(std::string text) {

		if(text[0] == ' ') {
			text.replace(0, 1, &quot;&quot;);
		}

		if(text[text.length()-1] == ' ') {
			text.replace(text.length()-1, 1, &quot;&quot;);
		}

		return text;
	}

	void textTool::stripWhiteSpace(std::string *text) {
		std::string::iterator it;

		it = text-&gt;begin();

		if(*it == ' ') {
			text-&gt;replace(0, 1, &quot;&quot;);
		}

		it = text-&gt;end();

		if(*(it-1) == ' ') {
			text-&gt;replace(text-&gt;length()-1, 1, &quot;&quot;);
		}
	}

	void textTool::showSegments() const {
		for(int i = 0; i &lt; this-&gt;segments.size(); i++) {
			std::cout &lt;&lt; this-&gt;segments[i] &lt;&lt; std::endl;
		}
	}

	const std::map&lt;std::string, int&gt; &amp; textTool::computeTokensFrequ(const std::string &amp;text) {
		this-&gt;tokenize(text);
		this-&gt;removeDuplicates(this-&gt;tokens);

		std::vector&lt;std::string&gt;::iterator it;

                //@todo :: Zaimplementowac algorytm do tworzenia macierzy wyrazen (term matrix, tm)
		for (it = this-&gt;uniqueTokens.begin(); it &lt; this-&gt;uniqueTokens.end(); it++) {
		    std::cout &lt;&lt; &quot; &quot; &lt;&lt; *it;
		}

		return this-&gt;tokensFrequ;
	}

	const std::vector&lt;std::string&gt; &amp; textTool::tokenize(const std::string &amp;text) {

            // Buforowany string
	    std::string buf;

	    // Wstawienie stringu z potoku
	    std::stringstream ss(text);

	    while (ss &gt;&gt; buf) {
	    	this-&gt;tokens.push_back(buf);
		}

		return this-&gt;tokens;
	}

	int textTool::getCountTokens() const {
		return this-&gt;tokens.size();
	}

	int textTool::getCountUniqueTokens() {
		if(this-&gt;tokens.size() != 0 &amp;&amp; this-&gt;uniqueTokens.size() == 0) {
			this-&gt;removeDuplicates(this-&gt;tokens);

			return this-&gt;uniqueTokens.size();
		} else {
			return this-&gt;uniqueTokens.size();
		}
	}

	const std::vector&lt;std::string&gt; &amp; textTool::removeDuplicates(std::vector&lt;std::string&gt; vec) {

            std::sort(vec.begin(), vec.end());
	    vec.erase(std::unique(vec.begin(), vec.end()), vec.end());

	    this-&gt;uniqueTokens = vec;

            return this-&gt;uniqueTokens;
	 }

	textTool::~textTool() {

	}

} /* namespace tt */
</pre>
<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></div>
]]></content:encoded>
			<wfw:commentRss>http://profind.pl/2012/01/12/laboratoria-nr-16-program-nr-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Laboratoria nr 15 program nr 1</title>
		<link>http://profind.pl/2012/01/03/laboratoria-nr-15-program-nr-1/</link>
		<comments>http://profind.pl/2012/01/03/laboratoria-nr-15-program-nr-1/#comments</comments>
		<pubDate>Tue, 03 Jan 2012 16:16:35 +0000</pubDate>
		<dc:creator>Marcin</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[c/c++]]></category>
		<category><![CDATA[programowanie w c]]></category>
		<category><![CDATA[przykładowe programy]]></category>

		<guid isPermaLink="false">http://profind.pl/2012/01/03/laboratoria-nr-15-program-nr-1/</guid>
		<description><![CDATA[Projektowanie klas i programowanie obiektowe na przykładzie aplikacji do przetwarzanie tekstu. Poniżej został zaprezentowany szkielet aplikacji do przetwarzania tekstu, który będzie rozbudowywany i omawiany wraz z nowymi laboratoriami. Przedstawiane zagadnienia będą obejmowały zawansowane aspekty programowania w c++. Czytelnicy nabiorą biegłości w wykorzystaniu biblioteki standardowej STL oraz Boost. Zapoznają się z szablonami oraz metodami projektowania klas. [...]]]></description>
			<content:encoded><![CDATA[<p align="justify">Projektowanie klas i programowanie obiektowe na przykładzie aplikacji do przetwarzanie tekstu.</p>
<p align="justify">Poniżej został zaprezentowany szkielet aplikacji do przetwarzania tekstu, który będzie rozbudowywany i omawiany wraz z nowymi laboratoriami. Przedstawiane zagadnienia będą obejmowały zawansowane aspekty programowania w c++. Czytelnicy nabiorą biegłości w wykorzystaniu biblioteki standardowej STL oraz Boost. Zapoznają się z szablonami oraz metodami projektowania klas. Wszytko zostanie przedstawione na podstawie projektowania i implementacji programu do przetwarzania tekstu.</p>
<p align="justify">Poniżej zaprezentowano interfejsy jak i ich implementacja klas które będą omawiane, refaktoryzowane i stosowane podczas omawiania ww. materiału. Podstawowy szkielet aplikacji składa się z następujących plików:</p>
<p align="justify">- agencyText.cpp – zawiera kod wykonawczy programu oraz testy zaprojektowanych i zaimplementowanych interfejsów,</p>
<p align="justify">- textAgent.h oraz textAgent.cpp – interfejs oraz jego implementacja do rejestrowania i użytkowania modułu do przetwarzania tekstu,</p>
<p align="justify">- textTool.h oraz textTool.cpp – interfejs oraz jego implementacja do przetwarzania strumienia tekstowego.</p>
<p align="justify">Kod aplikacji wykorzystujący utworzone interfejsy przedstawia listing poniżej:</p>
<p><span id="more-1081"></span>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:41fb1403-7afd-4a5d-b547-7df84bad9b03" class="wlWriterEditableSmartContent">
<pre class="brush: cpp; gutter: true; first-line: 1; tab-size: 4;  toolbar: false;  width: 518px; height: 439px;" style=" width: 518px; height: 439px;overflow: auto;">agencyText.cpp 

//============================================================================
// Name        : agencyText.cpp
// Author      : Marcin Mirończuk
// Version     : 1.0
// Copyright   : GPL
// Description : The agency to text retrive
//============================================================================

/**
 * Rejestracja bibliotek
 */
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;
#include &quot;textAgent.h&quot;

/**
 * Rejestracja przestrzeni nazw
 */
using namespace std;
using namespace ta;

/**
 * Program glowny
 */
int main() {

	/**
	 * Wystartowanie kilku agentow dynamicznych oraz statycznych, nazwanych jak i nienazwanych (anonimowych)
	 */
	ta::textAgent agentStatyczny(1220, 1, &quot;przetwarzacz tekstu 1&quot;, &quot;Agent T1&quot;);
	ta::textAgent niezweryfikowanyAgentStatyczny;

	textAgent *agentDynamiczny = new textAgent(12330, 2, &quot;przetwarzacz tekstu 2&quot;, &quot;Agnet T2&quot;);
	textAgent *niezweryfikowanyAgentDynamiczny = new textAgent();

	try {

		/**
		 * Pokazanie informacji o rezydujacych agentach
		 */
		cout &lt;&lt; &quot;Zarejestrowany agent i jego dane:&quot; &lt;&lt; endl;
		agentStatyczny.showData();

		cout &lt;&lt; endl;

		cout &lt;&lt; &quot;Agent oczekujacy na rejestracje:&quot; &lt;&lt; endl;
		niezweryfikowanyAgentStatyczny.showData();

		cout &lt;&lt; endl;

		cout &lt;&lt; &quot;Agent dynamiczny zarejstrowany:&quot; &lt;&lt; endl;
		agentDynamiczny-&gt;showData();

		cout &lt;&lt; endl;

		cout &lt;&lt; &quot;Agent dynamiczny niezweryfikowany:&quot; &lt;&lt; endl;
		niezweryfikowanyAgentDynamiczny-&gt;showData();

		cout &lt;&lt; endl;

		/**
		 * Rejestracja modulu (przybornika) do przetwarzania tekstow
		 */
		tt::textTool tt;

		/**
		 * Rejestracja przybornika dla agenta dynamicznego
		 */
		agentDynamiczny-&gt;rejestrTextTool(tt);
		agentDynamiczny-&gt;rejestrTextTool().extractSegments(&quot;Ala ma kota.&quot;);

		cout &lt;&lt; &quot;Ilosc zliczonych segmentow: &quot; &lt;&lt;  agentDynamiczny-&gt;rejestrTextTool().getCountSegments() &lt;&lt; endl;
		cout &lt;&lt; &quot;Pokaz jakie segmenty zliczyles: &quot; &lt;&lt; endl;
		agentDynamiczny-&gt;rejestrTextTool().showSegments();

		cout &lt;&lt; endl;

		/**
		 * Rejestracja przybornika dla agenta statycznego
		 */
		agentStatyczny.rejestrTextTool(tt);
		agentStatyczny.rejestrTextTool().extractSegments(&quot;A ja mam kota. I wiecej tekstu.&quot;);

		cout &lt;&lt; &quot;Ilosc zliczonych segmentow: &quot; &lt;&lt; agentStatyczny.rejestrTextTool().getCountSegments() &lt;&lt; endl;
		cout &lt;&lt; &quot;Pokaz jakie segmenty zliczyles: &quot; &lt;&lt; endl;
		agentStatyczny.rejestrTextTool().showSegments();

		cout &lt;&lt; endl;

		cout &lt;&lt; &quot;Testowanie usowania spacji:&quot; &lt;&lt; endl;

		std::string testString1 = &quot; kota &quot;;
		cout &lt;&lt; &quot;- Tekst przed filtracja: &quot; &lt;&lt; testString1 &lt;&lt; endl;
		cout &lt;&lt; &quot;- Filtracja: &quot; &lt;&lt; &quot;Tekst odfiltrowany: &quot; &lt;&lt; agentStatyczny.rejestrTextTool().stripWhiteSpace(testString1) &lt;&lt; endl;
		cout &lt;&lt; &quot;- Filtracja: &quot; &lt;&lt; &quot;Tekst pierwotny &quot; &lt;&lt; testString1 &lt;&lt; endl;

		std::string *pTestString1 = &amp;testString1;
		cout &lt;&lt; &quot;- Tekst przed filtracja wskaznik / zmienna: &quot; &lt;&lt; *pTestString1 &lt;&lt; &quot; / &quot; &lt;&lt; testString1 &lt;&lt; endl;
		agentStatyczny.rejestrTextTool().stripWhiteSpace(pTestString1);
		cout &lt;&lt; &quot;- Filtracja: &quot; &lt;&lt; &quot;Tekst odfiltrowany &quot; &lt;&lt; *pTestString1 &lt;&lt; endl;
		cout &lt;&lt; &quot;- Filtracja: &quot; &lt;&lt; &quot;Tekst pierwotny &quot; &lt;&lt; testString1 &lt;&lt; endl;

		cout &lt;&lt; endl;

		cout &lt;&lt; &quot;Testowanie tokenizacji:&quot; &lt;&lt; endl;
		std::string testString2 = &quot;Ala ma kota. A kot ma na imie Ala.&quot;;
		cout &lt;&lt; &quot;- Tekst podlegajacy tokenizacji: &quot; &lt;&lt; testString2 &lt;&lt; endl;
		agentStatyczny.rejestrTextTool().tokenize(testString2);
		cout &lt;&lt; &quot;- Ilosc tokenow: &quot; &lt;&lt;  agentStatyczny.rejestrTextTool().getCountTokens() &lt;&lt; endl;
		cout &lt;&lt; &quot;- Ilosc unikatowych tokenow: &quot; &lt;&lt;  agentStatyczny.rejestrTextTool().getCountUniqueTokens();

		delete niezweryfikowanyAgentDynamiczny;
		delete agentDynamiczny;

	} catch (std::string exception) {
		cout&lt;&lt;&quot;Wyjatek: &quot;&lt;&lt; exception;

		delete niezweryfikowanyAgentDynamiczny;
		delete agentDynamiczny;
	}

	return 0;
}
</pre>
<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></div>
<p align="justify">Interfejs agenta który rejestruje moduł do przetwarzania tekstu i za pośrednictwem którego odbywają się wszelkie modyfikacja przedstawia listing poniżej:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:725a234c-a108-402e-9dc0-187dcf12c1fc" class="wlWriterEditableSmartContent">
<pre class="brush: cpp; gutter: true; first-line: 1; tab-size: 4;  toolbar: false;  width: 518px; height: 439px;" style=" width: 518px; height: 439px;overflow: auto;">/*
 * textAgent.h
 *
 *  Created on: 21-12-2011
 *  Author: Marcin Mirończuk
 *  Licenc: GPL
 *
 *  Klas modelujaca podstawowe elementy agenta do przetwarzania tekstu.
 *  Agent ma mozliwosc rejestrowania u siebie modulu do przetwarzania tekstu za omoca ktorego przetwarza tekst.
 *
 */

#include &lt;string&gt;
#include &quot;textTool.h&quot;

#ifndef TA_H_
#define TA_H_

/**
 * Definicja przestrzeni nazw
 */
namespace ta {

	/**
	 *  Definicja klasy
	 */
	class textAgent {

		/**
		 * Skladowe i metody prywatne klasy
		 */
		private:

			/**
			 * @type int timeCreate Czas w sekundach  Unix timestamp
			 */
			int timeCreate;

			/**
			 * @type float priority Priorytet agebta
			 */
			int priority;

			/**
			 * @type string task Zadanie/praca do wykonania przez agebta
			 */
			std::string task;

			/**
			 * @type string name Nazwa agenta
			 */
			std::string name;

			/**
			 * @type bool isTextTool Flaga rejestracji modulu tekstu
			 */
			bool isTextTool;

			/**
			 * @type textTool textTool Uchwyt do modulu przetwarzajacego tekst
			 */
			tt::textTool textTool;

		/**
		 * Skladowe i metody publiczne klasy
		 */
		public:

			/**
			 * Konstruktor podstawowy domyslny
			 */
			textAgent();

			/**
			 * Konstruktor rozszerzony
			 */
			textAgent(float ptimeCreate, float ppriority, std::string ptask, std::string pname);

			/**
			 * Pobranie wieku agenta
			 *
			 * @return float
			 */
			int getTimeCreate();

			/**
			 * Pobranie wagi agenta
			 *
			 * @return float
			 */
			int getPriority();

			/**
			 * Pobranie zadania agenta
			 *
			 * @return string
			 */
			std::string getTask();

			/*
			 * Pobranie nazwy agenta
			 *
			 * @return string
			 */
			std::string getName();

			/**
			 * Pokazanie danych o agencie
			 *
			 * @return void
			 */
			void showData();

			/**
			 * Rejestracja modulu do przetwarzania tekstu
			 *
			 * @return tt::textTool
			 */
			const tt::textTool &amp; rejestrTextTool(tt::textTool tt);

			/**
			 * Rejestracja, pobranie modulu do przetwarzania tekstu
			 *
			 * @return tt::textTool
			 * @thorw exception
			 */
			tt::textTool &amp; rejestrTextTool();

			/**
			 * Destruktor
			 */
			virtual ~textAgent();
	};

} /* namespace textagent */
#endif /* TA_H_ */
</pre>
<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></div>
<p align="justify">Interfejs programu (modułu) do przetwarzania strumienia danych tekstowych przedstawia listing poniżej:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:35864ad0-f3de-411d-9264-82aeedaee369" class="wlWriterEditableSmartContent">
<pre class="brush: cpp; gutter: true; first-line: 1; tab-size: 4;  toolbar: false;  width: 518px; height: 439px;" style=" width: 518px; height: 439px;overflow: auto;">/*
 * textAgent.cpp
 *
 *  Created on: 21-12-2011
 *  Author: Marcin Mirończuk
 *  Licenc: GPL
 *
 *  Implementacja interfejsu agenta do przetwarzania tekstu @see textAgent.h
 *
 */

#include &lt;iostream&gt;
#include &quot;textAgent.h&quot;
#include &quot;textTool.h&quot;

namespace ta {

	textAgent::textAgent() {
		this-&gt;timeCreate = 0;
		this-&gt;priority = 0;
		this-&gt;task = &quot;unknown&quot;;
		this-&gt;name = &quot;inkognito&quot;;

		this-&gt;isTextTool = false;
	}

	textAgent::textAgent(float ptimeCreate, float ppriority, std::string ptask, std::string pname) {
		this-&gt;timeCreate = ptimeCreate;
		this-&gt;priority = ppriority;
		this-&gt;task = ptask;
		this-&gt;name = pname;

		this-&gt;isTextTool = false;
	}

	int textAgent::getTimeCreate() {
		return this-&gt;timeCreate;
	}

	int textAgent::getPriority() {
		return this-&gt;priority;
	}

	std::string textAgent::getTask() {
		return this-&gt;task;
	}

	std::string textAgent::getName() {
		return this-&gt;name;
	}

	void textAgent::showData() {
		std::cout &lt;&lt; &quot;Time create: &quot; &lt;&lt; this-&gt;timeCreate &lt;&lt; std::endl;
		std::cout &lt;&lt; &quot;Priority: &quot; &lt;&lt; this-&gt;priority &lt;&lt; std::endl;
		std::cout &lt;&lt; &quot;Name: &quot; &lt;&lt; this-&gt;name &lt;&lt; std::endl;
		std::cout &lt;&lt; &quot;Task: &quot; &lt;&lt; this-&gt;task &lt;&lt; std::endl;
	}

	const tt::textTool &amp; textAgent::rejestrTextTool(tt::textTool tt) {
		if(this-&gt;isTextTool == false) {
			this-&gt;textTool = tt;

			this-&gt;isTextTool = true;

			return this-&gt;textTool;
		} else {
			return this-&gt;textTool;
		}
	}

	tt::textTool &amp; textAgent::rejestrTextTool() {
		if(this-&gt;isTextTool == false) {
			std::string exception = &quot;Unregister text tool!&quot;;

			throw exception;
		} else {
			return this-&gt;textTool;
		}
	}

	textAgent::~textAgent() {

	}

} /* namespace ta */
</pre>
<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></div>
<p align="justify">Implementację interfejsu programu do przetwarzania tekstu zawiera listing poniżej:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:c82d827e-8da6-4ab1-b69c-02ae0c80cef6" class="wlWriterEditableSmartContent">
<pre class="brush: cpp; gutter: true; first-line: 1; tab-size: 4;  toolbar: false;  width: 518px; height: 439px;" style=" width: 518px; height: 439px;overflow: auto;">/*
 * textTool.h
 *
 *  Created on: 21-12-2011
 *  Author: Marcin Mirończuk
 *  Licenc: GPL
 *
 *  Klas modelujaca modul (przybornik) do przetwarzania tekstu.
 *
 */

#include &lt;map&gt;
#include &lt;vector&gt;
#include &lt;string&gt;

#ifndef TT_H_
#define TT_H_

/**
 * Definicja przestrzeni nazw
 */
namespace tt {

	/**
	 *  Definicja klasy
	 */
	class textTool {

		/**
		 * Skladowe i metody prywatne klasy
		 */
		private:

			/**
			 * @type vector&lt;string&gt; segment Wektor segmentow
			 */
			std::vector&lt;std::string&gt; segments;

			/**
			 * @type vector&lt;string&gt; tokens Wektor tokenow (wyrazen)
			 */
			std::vector&lt;std::string&gt; tokens;

			/**
			 * @type vector&lt;string&gt; uniqueTokens Wektor unikalnych tokenow (wyrazen)
			 */
			std::vector&lt;std::string&gt; uniqueTokens;

			/**
			 * @type vector&lt;string, int&gt; tokensFrequ Tablica klucz=wartosc czestotliwosci wyrazen
			 */
			std::map&lt;std::string, int&gt; tokensFrequ;

			/**
			 * Usowanie duplikatow wyrazen z wektora wyrazen
			 *
			 * @see http://learningcppisfun.blogspot.com/2008/04/remove-duplicates-from-vector.html
			 * @see http://stackoverflow.com/questions/1041620/most-efficient-way-to-erase-duplicates-and-sort-a-c-vector
			 *
			 * @param vector&lt;string&gt; vec
			 *
			 * @return vector&lt;string&gt;
			 */
			std::vector&lt;std::string&gt; removeDuplicates(std::vector&lt;std::string&gt; vec);

		public:

			/**
			 * Domyslny konstruktor
			 */
			textTool();

			/**
			 * Wydobywanie segmentow z tekstu.
			 *
			 * @param string &amp;text
			 *
			 * @return vector&lt;string&gt;
			 */
			std::vector&lt;std::string&gt; extractSegments(const std::string &amp;text);

			/**
			 * Pobranie ilosci wydobytych segmentow z tekstu.
			 *
			 * @return int
			 */
			int getCountSegments();

			/**
			 * Pokazanie wydobytych segmentow z tekstu.
			 *
			 * @return void
			 */
			void showSegments();

			/**
			 * Usuniecie spacji z poczatku jak i z konca lancucha znakow.
			 *
			 * @param string text
			 *
			 * @return string
			 */
			std::string stripWhiteSpace(std::string text);

			/**
			 * Przeciazona wersja usuniecia spacji z poczatku jak i z konca lancucha znakow.
			 *
			 * @param string *text
			 *
			 * @return void
			 */
			void stripWhiteSpace(std::string *text);

			/**
			 * Kalkulacja, wyznaczanie macierzy czetotliwosci wystepowania wyrazen w pojedynczym dokumencie tekstowym.
			 *
			 * @param string &amp;text
			 *
			 * @return map&lt;string, int&gt;
			 */
			std::map&lt;std::string, int&gt; computeTokensFrequ(const std::string &amp;text);

			/**
			 * Tokenizacja tekstu tj. rozbicie tekstu na wektor wyrazen.
			 * @see http://oopweb.com/CPP/Documents/CPPHOWTO/Volume/C++Programming-HOWTO-7.html
			 *
			 * @param string &amp;text
			 *
			 * @return vector&lt;string&gt;
			 */
			std::vector&lt;std::string&gt; tokenize(const std::string &amp;text);

			/**
			 * Pobranie ilosci wyrazen.
			 *
			 * @return int
			 */
			int textTool::getCountTokens();

			/**
			 * Pobranie ilosci unikalnych wyrazen.
			 *
			 * @return int
			 */
			int textTool::getCountUniqueTokens();

			/**
			 * Domyslny destruktor
			 */
			virtual ~textTool();
		};

	} /* namespace tt */
#endif /* TT_H_ */
</pre>
<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></div>
<p align="justify">Implementację powyżej zaprezentowanego interfejsu programu do przetwarzania tekstu zawiera listing poniżej:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:4f751e80-2284-41fd-83cd-0e73f90c907b" class="wlWriterEditableSmartContent">
<pre class="brush: cpp; gutter: true; first-line: 1; tab-size: 4;  toolbar: false;  width: 518px; height: 439px;" style=" width: 518px; height: 439px;overflow: auto;">/*
 * textTool.cpp
 *
 *  Created on: 21-12-2011
 *  Author: Marcin Mirończuk
 *  Licenc: GPL
 *
 *  Implementacja interfejsu modulu do przetwarzania tekstu @see textTool.h
 *
 */

#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;sstream&gt;
#include &lt;algorithm&gt;
#include &quot;textTool.h&quot;

namespace tt {

	textTool::textTool() {
	}

	/**
	 * Bardzo naiwna, prezentacyja wersji algorytmu do rozbijania tekstu na segmenty (zdania)
	 */
	std::vector&lt;std::string&gt; textTool::extractSegments(const std::string &amp;text) {

		std::string tempSegment;

		for(int i = 0; i &lt; text.length(); i++) {
			if(text[i] == '.' || text[i] == '?' || text[i] == '!') {
				tempSegment = (std::string) tempSegment;
				this-&gt;segments.push_back(this-&gt;stripWhiteSpace(tempSegment));
				tempSegment.clear();
			} else {
				tempSegment += text[i];
			}
		}

		return this-&gt;segments;
	}

	int textTool::getCountSegments() {
		return this-&gt;segments.size();
	}

	std::string textTool::stripWhiteSpace(std::string text) {

		if(text[0] == ' ') {
			text.replace(0, 1, &quot;&quot;);
		}

		if(text[text.length()-1] == ' ') {
			text.replace(text.length()-1, 1, &quot;&quot;);
		}

		return text;
	}

	void textTool::stripWhiteSpace(std::string *text) {
		std::string::iterator it;

		it = text-&gt;begin();

		if(*it == ' ') {
			text-&gt;replace(0, 1, &quot;&quot;);
		}

		it = text-&gt;end();

		if(*(it-1) == ' ') {
			text-&gt;replace(text-&gt;length()-1, 1, &quot;&quot;);
		}
	}

	void textTool::showSegments() {
		for(int i = 0; i &lt; this-&gt;segments.size(); i++) {
			std::cout &lt;&lt; this-&gt;segments[i] &lt;&lt; std::endl;
		}
	}

	std::map&lt;std::string, int&gt; textTool::computeTokensFrequ(const std::string &amp;text) {
		this-&gt;tokenize(text);
		this-&gt;removeDuplicates(this-&gt;tokens);

		std::vector&lt;std::string&gt;::iterator it;

		for (it = this-&gt;uniqueTokens.begin(); it &lt; this-&gt;uniqueTokens.end(); it++) {
		    std::cout &lt;&lt; &quot; &quot; &lt;&lt; *it;
		}

		return this-&gt;tokensFrequ;
	}

	std::vector&lt;std::string&gt; textTool::tokenize(const std::string &amp;text) {

		// Buforowany string
	    std::string buf;

	    // Wstawienie stringu z potoku
	    std::stringstream ss(text);

	    while (ss &gt;&gt; buf) {
	    	this-&gt;tokens.push_back(buf);
		}

		return this-&gt;tokens;
	}

	int textTool::getCountTokens() {
		return this-&gt;tokens.size();
	}

	int textTool::getCountUniqueTokens() {
		if(this-&gt;tokens.size() != 0 &amp;&amp; this-&gt;uniqueTokens.size() == 0) {
			this-&gt;removeDuplicates(this-&gt;tokens);

			return this-&gt;uniqueTokens.size();
		} else {
			return this-&gt;uniqueTokens.size();
		}
	}

	std::vector&lt;std::string&gt; textTool::removeDuplicates(std::vector&lt;std::string&gt; vec) {
		 std::sort(vec.begin(), vec.end());
	     vec.erase(std::unique(vec.begin(), vec.end()), vec.end());

	     this-&gt;uniqueTokens = vec;

	     return this-&gt;uniqueTokens;
	 }

	textTool::~textTool() {

	}

} /* namespace tt */
</pre>
<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></div>
]]></content:encoded>
			<wfw:commentRss>http://profind.pl/2012/01/03/laboratoria-nr-15-program-nr-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>R rozszerzenia i R paczki</title>
		<link>http://profind.pl/2011/12/15/r-rozszerzenia-i-r-paczki/</link>
		<comments>http://profind.pl/2011/12/15/r-rozszerzenia-i-r-paczki/#comments</comments>
		<pubDate>Thu, 15 Dec 2011 18:54:08 +0000</pubDate>
		<dc:creator>Marcin</dc:creator>
				<category><![CDATA[Ogólne zapiski kusownika it-yka]]></category>

		<guid isPermaLink="false">http://profind.pl/?p=1075</guid>
		<description><![CDATA[Osoby zainteresowane opublikowaniem swego kodu utworzonego w R project, zarówno w czystym R jak i w postaci rozszerzeń w innych językach, na pewno zainteresują materiały na stronie http://cran.r-project.org/doc/manuals/R-exts.html. Materiały tam zebrane omawiają szczegółowo i wyczerpująco temat tworzenia własnych dodatków do R. Osobom które początkują w tym temacie polecam nieco bardziej &#8222;lżejsze&#8221; lektóry w postaci: - opracowania krok po kroku [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Osoby zainteresowane opublikowaniem swego kodu utworzonego w R project, zarówno w czystym R jak i w postaci rozszerzeń w innych językach, na pewno zainteresują materiały na stronie <a href="http://cran.r-project.org/doc/manuals/R-exts.html">http://cran.r-project.org/doc/manuals/R-exts.html</a>. Materiały tam zebrane omawiają szczegółowo i wyczerpująco temat tworzenia własnych dodatków do R. Osobom które początkują w tym temacie polecam nieco bardziej &#8222;lżejsze&#8221; lektóry w postaci:</p>
<p style="text-align: justify;">- opracowania krok po kroku jak tworzyć paczki w R <a href="http://cran.r-project.org/doc/contrib/Leisch-CreatingPackages.pdf">http://cran.r-project.org/doc/contrib/Leisch-CreatingPackages.pdf</a></p>
<p style="text-align: justify;">- w googlu albo <a href="http://search.carrot2.org/stable/search">http://search.carrot2.org/stable/search</a> wstukać frazę <em>Writing R Extensions </em></p>
<p style="text-align: justify;">Osobiście korzystałem z pierwszego jak i drugiego linku. Natomiast projekt który utworzyłem związany z implementacją softu do kalsyfikacji umieściłem na platformie <a href="http://r-forge.r-project.org/">http://r-forge.r-project.org/</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://profind.pl/2011/12/15/r-rozszerzenia-i-r-paczki/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Artykuły</title>
		<link>http://profind.pl/2011/12/09/artykuly/</link>
		<comments>http://profind.pl/2011/12/09/artykuly/#comments</comments>
		<pubDate>Fri, 09 Dec 2011 09:51:56 +0000</pubDate>
		<dc:creator>Marcin</dc:creator>
				<category><![CDATA[Dziennik badań]]></category>
		<category><![CDATA[Ogólne zapiski kusownika it-yka]]></category>
		<category><![CDATA[analiza danych tekstowych]]></category>
		<category><![CDATA[analiza raportów]]></category>
		<category><![CDATA[artykuły]]></category>
		<category><![CDATA[dzielenie tekstu na segmenty]]></category>
		<category><![CDATA[dzielenie tekstu na zdania]]></category>
		<category><![CDATA[eksplroacja danych tekstowych]]></category>
		<category><![CDATA[ekstrakcja informacji]]></category>
		<category><![CDATA[ERP]]></category>
		<category><![CDATA[HSWD]]></category>
		<category><![CDATA[information extraction]]></category>
		<category><![CDATA[segmentacja tekstu]]></category>
		<category><![CDATA[segmentator regułowy]]></category>
		<category><![CDATA[segmentator regułowy tekstu]]></category>
		<category><![CDATA[SWD]]></category>
		<category><![CDATA[systemu planowania zasobów]]></category>
		<category><![CDATA[systemy wspomagania decyzji i ERP]]></category>
		<category><![CDATA[text mining]]></category>

		<guid isPermaLink="false">http://profind.pl/?p=1040</guid>
		<description><![CDATA[Na koniec roku spłynęły recenzje artykułów oddanych do czasopism. Trochę się tego nazbierało a sam rok był bardzo owocny w badania i eksperymenty, przynoszące dość zaskakujące rezultaty. Zainteresowane osoby tematyką eksploracji danych a dokładniej eksploracją danych tekstowych miło mi jest poinformować, że na ten temat będą mogły poczytać w czasopiśmie Metod Informatyki Stosowanej (http://www.pan.wi.zut.edu.pl/). Artykuł [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Na koniec roku spłynęły recenzje artykułów oddanych do czasopism. Trochę się tego nazbierało a sam rok był bardzo owocny w badania i eksperymenty, przynoszące dość zaskakujące rezultaty.</p>
<p style="text-align: justify;">Zainteresowane osoby tematyką eksploracji danych a dokładniej eksploracją danych tekstowych miło mi jest poinformować, że na ten temat będą mogły poczytać w czasopiśmie Metod Informatyki Stosowanej<em> </em>(<a href="http://www.pan.wi.zut.edu.pl/">http://www.pan.wi.zut.edu.pl/</a>). Artykuł opisujący dziedzinę eksploracji danych tekstowych wraz z jej zastosowaniem w Państwowej Straży Pożarnej PSP nosi tytuł<em> Proces i metody eksploracji danych tekstowych do przetwarzania raportów z akcji ratowniczo-gaśniczych</em> i ukarze się w numerze 4/2011 ww. czasopisma. Z tematyką tą związany jest też następny artykuł pt. <em>System informacyjny na temat sieci hydrantów dla krajowego systemu ratowniczo-gaśniczego: metoda segmentacji tekstu i jej ocena,</em> który także zostanie wydany w tym czasopiśmie i ukaże się w numerze 1/2012. W artykule tym opisano szczegółową realizację eksperymentu opisującą podział tekstu na segmenty. Zajawka tego jak i poprzedniego artykułu w postaci abstraktów dostępne są w dziale <a href="http://profind.pl/publikacje/abstrakty/">Abstrakty</a>, życzę miłej lektury.</p>
<p style="text-align: justify;">Ostatnim nadesłanym do ww. czasopisma artykuł stanowił opis projektu związanego z rozwijaną koncepcją Systemu Wspomagania Decyzji dla PSP z wykorzystaniem komponentów platformy do planowania zasobów przedsiębiorstwa ERP. Artykuł ten ukaże się pod tytułem <em>Wykorzystanie komponentów platformy ERP do budowy drugiej generacji hybrydowego systemu wspomagania decyzji dla PSP, </em>w numerze 3/2011. Również jego zajawkę można zobaczyć w dziale <a href="http://profind.pl/publikacje/abstrakty/">Abstrakty</a>.</p>
<p style="text-align: justify;">Aktualnie cały czas oczekuje na decyzje z wydawnictwa CNBOP „Bezpieczeństwo i Technika Pożarnicza” w którym umieściłem dość interesujące przemyślenia i badania z zakresu inżynierii oprogramowania jak i eksploracji i segmentacji raportów. Niestety na ich ukazanie jak i recenzje jeszcze widać trochę będzie trzeba poczekać.</p>
]]></content:encoded>
			<wfw:commentRss>http://profind.pl/2011/12/09/artykuly/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>R stronki</title>
		<link>http://profind.pl/2011/11/30/r-stronki/</link>
		<comments>http://profind.pl/2011/11/30/r-stronki/#comments</comments>
		<pubDate>Wed, 30 Nov 2011 10:18:18 +0000</pubDate>
		<dc:creator>Marcin</dc:creator>
				<category><![CDATA[Ogólne zapiski kusownika it-yka]]></category>
		<category><![CDATA[R project]]></category>
		<category><![CDATA[grupowanie danych R project]]></category>
		<category><![CDATA[Pareto chart]]></category>
		<category><![CDATA[profilowanie pamięci]]></category>
		<category><![CDATA[r project]]></category>
		<category><![CDATA[R project grupowanie danych]]></category>
		<category><![CDATA[R project sorotwanie]]></category>
		<category><![CDATA[sortowanie danych R project]]></category>
		<category><![CDATA[wykres Pareto]]></category>
		<category><![CDATA[wykresy Pareto]]></category>

		<guid isPermaLink="false">http://profind.pl/?p=1014</guid>
		<description><![CDATA[Poniżej umieszczam kilka przydatnych linków do stron internetowych opisujących pewne zagadnienia które często wymagają rozwiązania lub zastosowania podczas badań wspieranych pakietem R project. Na stronach tych można uzyskać informacje na temat: - sortowania oraz grupowania danych (http://www.ats.ucla.edu/stat/r/faq/sort.htm, http://stackoverflow.com/questions/1296646/how-to-sort-a-dataframe-by-columns-in-r). Przy czym pierwszy link jest także krótkim kursem wprowadzającym do R, - profilowania aplikacji napisanych w R, w [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Poniżej umieszczam kilka przydatnych linków do stron internetowych opisujących pewne zagadnienia które często wymagają rozwiązania lub zastosowania podczas badań wspieranych pakietem R project. Na stronach tych można uzyskać informacje na temat:</p>
<p style="text-align: justify;">- sortowania oraz grupowania danych (<a href="http://www.ats.ucla.edu/stat/r/faq/sort.htm">http://www.ats.ucla.edu/stat/r/faq/sort.htm</a>, <a href="http://stackoverflow.com/questions/1296646/how-to-sort-a-dataframe-by-columns-in-r">http://stackoverflow.com/questions/1296646/how-to-sort-a-dataframe-by-columns-in-r</a>). Przy czym pierwszy link jest także krótkim kursem wprowadzającym do R,</p>
<p style="text-align: justify;">- profilowania aplikacji napisanych w R, w szczególności tych które wymagają użycia dużych zasobów pamięci. Czasami warto wiedzieć co aktualnie rezyduje na stosie pamięci (<a href="http://developer.r-project.org/memory-profiling.html">http://developer.r-project.org/memory-profiling.html</a>, <a href="http://heuristically.wordpress.com/2010/01/04/r-memory-usage-statistics-variable/">http://heuristically.wordpress.com/2010/01/04/r-memory-usage-statistics-variable/</a>),</p>
<p style="text-align: justify;">- tworzenia wykresów Pareto informacje można znaleźć na stronie <a href="http://www.oga-lab.net/RGM2/func.php?rd_id=qcc:pareto.chart">http://www.oga-lab.net/RGM2/func.php?rd_id=qcc:pareto.chart</a> opisującej pakiet i metody które służą do tego celu.</p>
<p style="text-align: justify;">Życzę miłego korzystania z wyżej przedstawionych rozwiązań.</p>
]]></content:encoded>
			<wfw:commentRss>http://profind.pl/2011/11/30/r-stronki/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>R mapy i R geotagowanie</title>
		<link>http://profind.pl/2011/11/20/r-mapy-i-r-geotagowanie/</link>
		<comments>http://profind.pl/2011/11/20/r-mapy-i-r-geotagowanie/#comments</comments>
		<pubDate>Sun, 20 Nov 2011 20:20:04 +0000</pubDate>
		<dc:creator>Marcin</dc:creator>
				<category><![CDATA[Dziennik badań]]></category>
		<category><![CDATA[Ogólne zapiski kusownika it-yka]]></category>
		<category><![CDATA[R project]]></category>
		<category><![CDATA[geotagowanie]]></category>
		<category><![CDATA[geotagowanie r]]></category>
		<category><![CDATA[geotagowanie r project]]></category>
		<category><![CDATA[r geotagowanie]]></category>
		<category><![CDATA[r project geotagowanie]]></category>

		<guid isPermaLink="false">http://profind.pl/?p=1010</guid>
		<description><![CDATA[Ostatnio poszukiwałem rozwiązania do geotagowania. Proces ten chciałem wykonać za pomocą nie API google map dla java scriptu lecz web serwisów i r project. Podyktowane to było tym aby utrzymać jednolite rozwiązanie programistyczne tj. jednolitą platformę eksperymentalną do przetwarzania tekstów w postaci raportów zaimplementowaną w jednym języku, bez różnego rodzaju miksów. Na początku rozpatrywałem użycie PHP i Java Scriptu [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Ostatnio poszukiwałem rozwiązania do geotagowania. Proces ten chciałem wykonać za pomocą nie API google map dla java scriptu lecz web serwisów i r project. Podyktowane to było tym aby utrzymać jednolite rozwiązanie programistyczne tj. jednolitą platformę eksperymentalną do przetwarzania tekstów w postaci raportów zaimplementowaną w jednym języku, bez różnego rodzaju miksów. Na początku rozpatrywałem użycie PHP i Java Scriptu niemniej po przeszperaniu internetu natknąłem się dość ciekawe rozwiązanie dla r project. Poniżej prezentuje listę linków związanych z zastosowaniem API google map w połączeniu z r project:</p>
<p style="text-align: justify;">- <a href="http://www.r-chart.com/2010/07/maps-geocoding-and-r-user-conference.html">http://www.r-chart.com/2010/07/maps-geocoding-and-r-user-conference.html</a></p>
<p style="text-align: justify;">- <a href="http://cran.r-project.org/web/packages/RgoogleMaps/vignettes/RgoogleMaps-intro.pdf">http://cran.r-project.org/web/packages/RgoogleMaps/vignettes/RgoogleMaps-intro.pdf</a></p>
<p style="text-align: justify;">- <a href="http://cran.r-project.org/web/packages/RgoogleMaps/RgoogleMaps.pdf">http://cran.r-project.org/web/packages/RgoogleMaps/RgoogleMaps.pdf</a></p>
<p style="text-align: justify;">- <a href="http://cran.r-project.org/web/packages/RgoogleMaps/index.html">http://cran.r-project.org/web/packages/RgoogleMaps/index.html</a></p>
<p style="text-align: justify;">- <a href="http://cran.r-project.org/web/packages/gooJSON/gooJSON.pdf">http://cran.r-project.org/web/packages/gooJSON/gooJSON.pdf</a></p>
<p style="text-align: justify;">- <a href="http://cran.r-project.org/web/packages/googleVis/vignettes/googleVis.pdf">http://cran.r-project.org/web/packages/googleVis/vignettes/googleVis.pdf</a></p>
<p style="text-align: justify;">- <a href="http://cran.r-project.org/web/packages/plotGoogleMaps/plotGoogleMaps.pdf">http://cran.r-project.org/web/packages/plotGoogleMaps/plotGoogleMaps.pdf</a></p>
<p style="text-align: justify;">Powodzenia w stosowaniu ww. rozwiązań.</p>
]]></content:encoded>
			<wfw:commentRss>http://profind.pl/2011/11/20/r-mapy-i-r-geotagowanie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>R project &#8211; obiektowość</title>
		<link>http://profind.pl/2011/11/20/r-project-system-obiektowy/</link>
		<comments>http://profind.pl/2011/11/20/r-project-system-obiektowy/#comments</comments>
		<pubDate>Sun, 20 Nov 2011 18:50:09 +0000</pubDate>
		<dc:creator>Marcin</dc:creator>
				<category><![CDATA[Ogólne zapiski kusownika it-yka]]></category>
		<category><![CDATA[R project]]></category>
		<category><![CDATA[object oriented system S5 r project]]></category>
		<category><![CDATA[r project oo]]></category>
		<category><![CDATA[r project S5]]></category>

		<guid isPermaLink="false">http://profind.pl/?p=987</guid>
		<description><![CDATA[R project posiada trzy systemy obiektowe: S3, S4 i S5. Odniesienia i opisy tych systemów można znaleźć na stronach: - https://github.com/hadley/devtools/wiki/R5 &#8211; opisującej nowy system S5, - http://biecek.pl/R/RC/Jakub%20Derbisz%20R%20reference%20card%20classes.pdf, opisującej podstawowe operatory klas, - http://stat.ethz.ch/R-manual/R-devel/library/methods/html/refClass.html, manual opisujący system S5 i funkcję setRefClass() służącą do tworzenia interfejsu klasy, - http://www.youtube.com/watch?v=UZkaZhsOfT4, prezentacja zawierająca opis trzech ww. systemów oraz [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify">R project posiada trzy systemy obiektowe: S3, S4 i S5. Odniesienia i opisy tych systemów można znaleźć na stronach:</p>
<p>- <a href="https://github.com/hadley/devtools/wiki/R5">https://github.com/hadley/devtools/wiki/R5</a> &#8211; opisującej nowy system S5,</p>
<p>- <a href="http://biecek.pl/R/RC/Jakub%20Derbisz%20R%20reference%20card%20classes.pdf">http://biecek.pl/R/RC/Jakub%20Derbisz%20R%20reference%20card%20classes.pdf</a>, opisującej podstawowe operatory klas,</p>
<p>- <a href="http://stat.ethz.ch/R-manual/R-devel/library/methods/html/refClass.html">http://stat.ethz.ch/R-manual/R-devel/library/methods/html/refClass.html</a>, manual opisujący system S5 i funkcję setRefClass() służącą do tworzenia interfejsu klasy,</p>
<p>-<a title="Prezentacja R project" href=" http://www.youtube.com/watch?v=UZkaZhsOfT4"> http://www.youtube.com/watch?v=UZkaZhsOfT4</a>, prezentacja zawierająca opis trzech ww. systemów oraz opis integracji R project z C++ poprzez pakiet Rcpp.</p>
<p>Zainteresowanym życzę miłej lektury. Poniżej natomiast przedtsawiam próbke kodu opisującej interfejs klasy account zaczerpniętej z prezentacji, do której link znajduje się na ostatniej pozycji ww. stron.</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:1fd190c3-01e4-4af8-a29e-8e151b3baac8" class="wlWriterEditableSmartContent">
<pre class="brush: plain; gutter: true; first-line: 1; tab-size: 4;  toolbar: false;  width: 518px; height: 439px;" style=" width: 518px; height: 439px;overflow: auto;">account &lt;- setRefClass(&quot;Account_R5&quot;,
	fields = list(
		balance = &quot;numeric&quot;,
		overdraft = &quot;numeric&quot;
	),
	methods = list(
		withdraw = function(amount) {
			print(&quot;Compute withdraw...&quot;)
		},
		deposit = function(amount) {
			print(&quot;Compute deposit...&quot;)
		}
	)
)

x &lt;- account$new(balance = 10.0, overdraft = 0.0)

x$withdraw(5)
x$deposit(10)</pre>
<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></div>
]]></content:encoded>
			<wfw:commentRss>http://profind.pl/2011/11/20/r-project-system-obiektowy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>R strony</title>
		<link>http://profind.pl/2011/11/20/r-strony/</link>
		<comments>http://profind.pl/2011/11/20/r-strony/#comments</comments>
		<pubDate>Sun, 20 Nov 2011 16:05:25 +0000</pubDate>
		<dc:creator>Marcin</dc:creator>
				<category><![CDATA[Ogólne zapiski kusownika it-yka]]></category>
		<category><![CDATA[R project]]></category>
		<category><![CDATA[blog o r]]></category>
		<category><![CDATA[język r]]></category>
		<category><![CDATA[programowanie w R]]></category>
		<category><![CDATA[r project]]></category>

		<guid isPermaLink="false">http://profind.pl/?p=980</guid>
		<description><![CDATA[Ostatnio szperając  po internecie za materiałami o języku R (w którym aktualnie wytwarzam większość softu do badań i eksperymentów) natknąłem się na świetny blog popularyzujący ten język, czy też platformę do obliczeń statystycznych i nie tylko.  Polecam dla osób zainteresowanych tym tematem wejście na http://www.r-bloggers.com/. Znajdziecie tam najświeższe informacje o zastosowaniach języka R i nie [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Ostatnio szperając  po internecie za materiałami o języku R (w którym aktualnie wytwarzam większość softu do badań i eksperymentów) natknąłem się na świetny blog popularyzujący ten język, czy też platformę do obliczeń statystycznych i nie tylko.  Polecam dla osób zainteresowanych tym tematem wejście na <a title="r bloggers" href="http://www.r-bloggers.com/">http://www.r-bloggers.com/</a>. Znajdziecie tam najświeższe informacje o zastosowaniach języka R i nie tylko, życzę miłej lektury.</p>
]]></content:encoded>
			<wfw:commentRss>http://profind.pl/2011/11/20/r-strony/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Czas wyruszyć na konferencję &#8211; Technologie Eksploracji i Reprezentacji Wiedzy 2011</title>
		<link>http://profind.pl/2011/09/06/czas-wyruszyc-na-konferencje-technologie-eksploracji-i-reprezentacji-wiedzy-2011/</link>
		<comments>http://profind.pl/2011/09/06/czas-wyruszyc-na-konferencje-technologie-eksploracji-i-reprezentacji-wiedzy-2011/#comments</comments>
		<pubDate>Tue, 06 Sep 2011 07:33:27 +0000</pubDate>
		<dc:creator>Marcin</dc:creator>
				<category><![CDATA[Dziennik badań]]></category>
		<category><![CDATA[Eksploracja danych]]></category>
		<category><![CDATA[eksploracja tekstu]]></category>
		<category><![CDATA[FCA]]></category>
		<category><![CDATA[formalna analiza pojęć]]></category>
		<category><![CDATA[projektwanie baz wiedzy]]></category>
		<category><![CDATA[segmentacja tekstu]]></category>

		<guid isPermaLink="false">http://profind.pl/2011/09/06/czas-wyruszyc-na-konferencje-technologie-eksploracji-i-reprezentacji-wiedzy-2011/</guid>
		<description><![CDATA[Jutro 07.08.2011 wyruszam po raz kolejny na konferencję pt. “Technologie Eksploracji i Reprezentacji Wiedzy” osoby zainteresowane tą tematyką mogą odnaleźć materiały konferencyjne na stronie głównej konferencji (http://irys.wi.pb.edu.pl/terw2011/pl/index.html). Osobiście będę prezentował temat pt. “Segmentator regułowy do segmentacji raportów z akcji ratowniczo-gaśniczych PSP: metoda projektowania i ocena rozwiązania”. Tak więc zostanie zaprezentowany kolejny etap prowadzonych przeze mnie [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Jutro 07.08.2011 wyruszam po raz kolejny na konferencję pt. “Technologie Eksploracji i Reprezentacji Wiedzy” osoby zainteresowane tą tematyką mogą odnaleźć materiały konferencyjne na stronie głównej konferencji (<a href="http://irys.wi.pb.edu.pl/terw2011/pl/index.html">http://irys.wi.pb.edu.pl/terw2011/pl/index.html</a>). Osobiście będę prezentował temat pt. “Segmentator regułowy do segmentacji raportów z akcji ratowniczo-gaśniczych PSP: metoda projektowania i ocena rozwiązania”. Tak więc zostanie zaprezentowany kolejny etap prowadzonych przeze mnie badań nad analizą raportów Państwowej Straży Pożarnej (PSP). Streszczenie odczytu który zostanie przeze mnie wygłoszony można znaleźć pod następującym linkiem <a href="http://profind.pl/wp-content/uploads/2011/09/streszczenie-odczytureferatu.pdf">streszczenie odczytu(referatu)</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://profind.pl/2011/09/06/czas-wyruszyc-na-konferencje-technologie-eksploracji-i-reprezentacji-wiedzy-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

