<?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>morfologik &#8211; Solr.pl</title>
	<atom:link href="https://solr.pl/tag/morfologik/feed/" rel="self" type="application/rss+xml" />
	<link>https://solr.pl</link>
	<description>All things to be found - Blog related to Apache Solr &#38; Lucene projects - https://solr.apache.org</description>
	<lastBuildDate>Wed, 11 Nov 2020 22:27:51 +0000</lastBuildDate>
	<language>pl-PL</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>Solr 4.0 i możliwości analizy języka polskiego</title>
		<link>https://solr.pl/2012/04/02/solr-4-0-i-mozliwosci-analizy-jezyka-polskiego/</link>
					<comments>https://solr.pl/2012/04/02/solr-4-0-i-mozliwosci-analizy-jezyka-polskiego/#comments</comments>
		
		<dc:creator><![CDATA[Rafał Kuć]]></dc:creator>
		<pubDate>Mon, 02 Apr 2012 21:27:23 +0000</pubDate>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[4.0]]></category>
		<category><![CDATA[analiza]]></category>
		<category><![CDATA[analyzer]]></category>
		<category><![CDATA[hunspell]]></category>
		<category><![CDATA[język]]></category>
		<category><![CDATA[lucene]]></category>
		<category><![CDATA[morfologik]]></category>
		<category><![CDATA[polish]]></category>
		<category><![CDATA[polski]]></category>
		<category><![CDATA[solr]]></category>
		<category><![CDATA[solr 4.0]]></category>
		<guid isPermaLink="false">http://sematext.solr.pl/?p=408</guid>

					<description><![CDATA[Ze względu na to, iż wsparcie dla języka polskiego w Lucene (i Solr) jest już od jakiegoś czasu, postanowiłem przyjrzeć się jak zmieni się to wraz z premierą Lucene i Solr w wersji 4.0. Dostępne opcje W obecnej chwili dostępne]]></description>
										<content:encoded><![CDATA[<p>Ze względu na to, iż wsparcie dla języka polskiego w Lucene (i Solr) jest już od jakiegoś czasu, postanowiłem przyjrzeć się jak zmieni się to wraz z premierą Lucene i Solr w wersji 4.0.</p>
<p><span id="more-408"></span></p>
<h3>Dostępne opcje</h3>
<p>W obecnej chwili dostępne są trzy opcje, jeżeli chodzi o analizę języka polskiego:</p>
<ul>
<li>Wykorzystanie możliwości&nbsp; biblioteki Stempel (od wersji 3.1 Solr)</li>
<li>Wykorzystanie&nbsp;możliwości biblioteki Hunspell i słownika języka polskiego (od wersji 3.5 Solr)</li>
<li>Wykorzystanie możliwości biblioteki Morfologik (od wersji 4.0 Solr, <a href="https://issues.apache.org/jira/browse/SOLR-3272" target="_blank" rel="noopener noreferrer">SOLR-3272</a>)</li>
</ul>
<h3>Konfiguracja</h3>
<p>Przyjrzyjmy się konfiguracji każdej z wyżej wymienionych funkcjonalności (należy pamiętać, że poniższe konfiguracje zostały oparte o Solr 4.0).</p>
<h4>Stempel</h4>
<p>W celu dodania stemmingu języka polskiego przy pomocy biblioteki Stempel, to proste dodanie filtra do definicji typu:
</p>
<pre class="brush:xml">&lt;filter class="solr.StempelPolishStemFilterFactory" /&gt;</pre>
<p>Oprócz tego, do <em>SOLR_HOME/lib</em> należy dodać bibliotekę <em>lucene-analyzers-stempel-4.0.jar</em> oraz <em>apache-solr-analysis-extras-4.0.jar</em>. <em></em> Dobrym pomysłem jest także użycie<em>&nbsp;solr.LowerCaseFilterFactory</em> przed Stemplem.</p>
<h4>Hunspell</h4>
<p>Podobnie, jak w powyższym przypadku, skorzystanie z Hunspell&#8217;a to dodanie filtra do definicji typu. Na przykład w taki sposób:
</p>
<pre class="brush:xml">&lt;filter class="solr.HunspellStemFilterFactory" dictionary="pl_PL.dic" affix="pl_PL.aff" ignoreCase="true" /&gt;</pre>
<p>Parametry <em>dictionary</em> oraz <em>affix</em> odpowiadają za definicję słownika z którego korzystamy. Natomiast parametr <em>ignoreCase</em> ustawiony na wartość <em>true</em> mówi filtrowi, aby nie zwracać uwagi na wielkość znaków. Słowniki można znaleźć m.in. pod adresem: <a href="http://wiki.services.openoffice.org/wiki/Dictionaries" target="_blank" rel="noopener noreferrer">http://wiki.services.openoffice.org/wiki/Dictionaries</a>.</p>
<h4>Morfologik</h4>
<p>Tak jak w wyżej wymienionych przypadkach, tak samo i tutaj, skorzystanie z Morfologika to dodanie filtra do definicji typu. Tym razem w następujący sposób:
</p>
<pre class="brush:xml">&lt;filter class="solr.MorfologikFilterFactory" dictionary="MORFOLOGIK" /&gt;</pre>
<p>Parametr <em>dictionary</em> to definicja z którego słownika chcemy skorzystać, do wyboru mamy:</p>
<ul>
<li>MORFOLOGIK</li>
<li>MORFEUSZ</li>
<li>COMBINED</li>
</ul>
<p>Oprócz tego, do <em>SOLR_HOME/lib</em> należy dodać bibliotekę <em>lucene-analyzers-morfologik-4.0.jar, </em><em>apache-solr-analysis-extras-4.0.jar, morfologik-fsa-1.5.2.jar</em>, <em>morfologik-polish-1.5.2.jar</em> oraz <em>morfologik-stemming-1.5.2.jar</em>.</p>
<h3>Porównanie działania</h3>
<p>Oczywiście nie byłem w stanie ocenić działania dla całego korpusu słów języka polskiego, dlatego wybrałem sobie cztery słowa, aby sprawdzić, jak zachowuje się każdy z wymienionych wyżej filtrów. Słowa te to: &#8222;<em>urodzić urodzony urodzona urodzeni&#8221;.</em> Wyniki przedstawiają się następująco:</p>
<h4>Stempel</h4>
<p>Wynikiem działania Stempla były następujące tokeny:
</p>
<pre>[urodzić] [urodzo] [urodzona] [urodzeni]</pre>
<p>Należy jednak pamiętać, iż Stempel to stemmer, a więc wyniki jego działania mogą i będą odbiegać od form podstawowych, czy też tematów słów. Ważne jest to, aby interesujące nas słowa sprowadzane były do tej samej formy, co umożliwi znalezienie odpowiedniego słowa przez Lucene/Solr. Pamiętając jednak o tym, widać iż wyniki nie są zadowalające, przynajmniej dla mnie. Na przykład zadając zapytanie <em>urodzić</em>, nie znaleźlibyśmy dokumentów ze słowami <em>urodzona</em>, czy <em>urodzony</em>. Dodatkowo widać, iż Stempel wyprodukował po jednym tokenie dla każdego ze słów.</p>
<h4>Hunspell</h4>
<p>Wynikiem działania Hunspell&#8217;a były następujące tokeny:
</p>
<pre>[urodzić, urodzić] [urodzony, urodzić] [urodzić] [urodzić, urodzony, urodzenie]</pre>
<p>Porównując wyniki uzyskane z pomocą Hunspell&#8217;a do tych uzyskanych z pomocą Stempla widać różnicę. Nasze przykładowe zapytanie o słowo <em>urodzić</em>, znalazłoby zarówno dokumenty ze słowem <em>urodzony</em>, jak również ze słowem <em>urodzona</em>, czy <em>urodzeni</em>. Całkiem miło. Dodatkowo widać, iż na trzy z czterech słów wejściowych Hunspell wygenerował więcej, niż jeden token (oczywiście umieszczając je na odpowiednich pozycjach w strumieniu tokenów). Wynik działania Hunspell&#8217;a mnie satysfakcjonuje, natomiast spójrzmy jeszcze na działanie najnowszego filtra dostępnego w Lucene i Solr pozwalającego na analizę języka polskiego, czyli na Morfologika.</p>
<h4>Morfologik</h4>
<p>Wynikiem działania Morfologika były następujące tokeny:
</p>
<pre>[urodzić] [urodzony, urodzić] [urodzić] [urodzić, urodzony]</pre>
<p>Porównując wyniki uzyskane za pomocą Morfologika do tych uzyskanych za pomocą Hunspell&#8217;a ciężko zauważyć różnicę (oczywiście w tym wypadku). Jedyną różnicą pomiędzy Hunspell&#8217;em, a Morfologikiem jest ostatni term dla słowa <em>urodzeni</em>, czyli <em>urodzenie</em>, którego nie otrzymaliśmy w wyniku działania Morfologika. Moim zdaniem wynik działania Morfologika, podobnie jak w przypadku Hunspell&#8217;a można uznać za satysfakcjonujący.</p>
<h3>Wydajność</h3>
<p>Test wydajności został zrobiony bardzo prosto &#8211; każdorazowo zostało zaindeksowanych 5 milionów dokumentów, gdzie wszystkie pola tekstowe były oparte o analizę języka polskiego z odpowiednim filtrem (do tego kilka standardowych filtrów, jak usuwanie stopwordów, synonimy, itp). Za każdym razem indeksowanie rozpoczynane było od nowa na nowej instancji Solr 4.0. Ze względu na korzystanie z Data Import Handlera polecenie commit wysyłane było co 100.000 dokumentów. Indeks składał się z kilkunastu pól, jednak sama struktura nie jest ważna ze względu na to, że zamierzałem zobaczyć, jak wygląda porównanie poszczególnych filtrów. Poniżej wyniki testu:</p>
[table “20” not found /]<br />

<p><strong>Uwaga<em>:</em></strong> W chwili pisania niniejszego tekstu, zgodnie ze zgłoszeniem <a href="https://issues.apache.org/jira/browse/SOLR-3245">SOLR-3245</a> istnieje problem z wydajnością Hunspella z polskimi słownikami w Solr 4.0. Najprawdopodobniej, sytuacja ta zostanie rozwiązana do czasu wypuszczenia wersji 4.0 Solr, jednak jeżeli zastanawiacie się nad korzystaniem z Solr 4.0 i Hunspell&#8217;a z polskimi słownikami wydajność takiego tandemu może być niezadowalająca.</p>
<p>Niestety ze względu na problemy wydajnościowe z Hunspell&#8217;em nie byliśmy w stanie porównać wydajności trzech dostępnych filtrów umożliwiających analizę języka polskiego. Natomiast z powyższej tabeli wnioskować można, iż w większości przypadków zarówno Stempel, jak i Morfologik będą charakteryzowały się podobną wydajnością.</p>
<h3>Krótkie podsumowanie</h3>
<p>Pomimo braku wyników wydajnościowych dotyczących Hunspell&#8217;a (bo te które są uważam za błędne i jestem pewien, że zostaną poprawione), widać iż Hunspell i Morfologik są dobrymi kandydatami do wykorzystania jeżeli chodzi o filtr umożliwiający analizę języka polskiego. W przypadku Morfologika, mamy wydajność podobną do Stempla, a w testach wychodzi na to, że Morfologik daje sobie radę z większą ilością polskich słów, co wpłynie pozytywnie na odczucia użytkowników.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://solr.pl/2012/04/02/solr-4-0-i-mozliwosci-analizy-jezyka-polskiego/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
	</channel>
</rss>
