<?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>3.5 &#8211; Solr.pl</title>
	<atom:link href="https://solr.pl/tag/3-5/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 20:44:25 +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>Identyfikacja języka dokumentu</title>
		<link>https://solr.pl/2012/01/23/identyfikacja-jezyka-dokumentu/</link>
					<comments>https://solr.pl/2012/01/23/identyfikacja-jezyka-dokumentu/#respond</comments>
		
		<dc:creator><![CDATA[Rafał Kuć]]></dc:creator>
		<pubDate>Mon, 23 Jan 2012 20:43:52 +0000</pubDate>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[3.5]]></category>
		<category><![CDATA[identyfikacja]]></category>
		<category><![CDATA[język]]></category>
		<category><![CDATA[języka]]></category>
		<category><![CDATA[solr]]></category>
		<category><![CDATA[tika]]></category>
		<guid isPermaLink="false">http://sematext.solr.pl/?p=355</guid>

					<description><![CDATA[Jedną z funkcjonalności najnowszej wersji Solr (czyli 3.5) jest możliwość identyfikacji języka indekowanego dokumentu na etapie indeksowania. Dzisiejszy wpis postanowiłem poświęcić tej funkcjonalności i przyjrzeć się jak tym razem Apache Solr współgra z Apache Tika. Na początek Należy pamiętać, iż]]></description>
										<content:encoded><![CDATA[<p>Jedną z funkcjonalności najnowszej wersji Solr (czyli <a href="http://solr.pl/2011/11/27/apache-lucene-i-solr-3-5/" target="_blank" rel="noopener noreferrer">3.5</a>) jest możliwość identyfikacji języka indekowanego dokumentu na etapie indeksowania. Dzisiejszy wpis postanowiłem poświęcić tej funkcjonalności i przyjrzeć się jak tym razem Apache Solr współgra z Apache Tika.</p>
<p><span id="more-355"></span></p>
<h3>Na początek</h3>
<p>Należy pamiętać, iż opisywana funkcjonalność została wprowadzona w Solr w wersji 3.5.</p>
<h3>Założenia</h3>
<p>Język będziemy wykrywać na postawie dwóch pól:&nbsp;<em>title</em>&nbsp;oraz&nbsp;<em>body</em>. Chcemy, aby wykryty język został zapisany w polu o nazwie <em>lang</em>.</p>
<h3>Struktura naszego indeksu</h3>
<p>Struktura indeksu jest oczywiście mocno uproszczona i zawiera jedynie pola potrzebne do testu. Sama definicja pól wygląda następująco:
</p>
<pre class="brush:xml">&lt;field name="id" type="string" indexed="true" stored="true" required="true" /&gt;
&lt;field name="title" type="text_ws" indexed="true" stored="true" /&gt;
&lt;field name="body" type="text_ws" indexed="true" stored="true" /&gt;
&lt;field name="lang" type="string" indexed="true" stored="true" /&gt;</pre>
<p>Wszystkie pola oznaczone są jako <em>stored=&#8221;true&#8221;</em>, aby zobaczyć wynik przetwarzania dokumentu przez procesor.</p>
<h3>Konfiguracja update request processor&#8217;a</h3>
<p>Aby móc wykorzystać funkcjonalność identyfikacji języka dokumentu konieczna jest konfiguacja następujących procesora aktualizacji. Skorzystamy z procesora opartego o Apache Tika (choć istnieje także druga implementacja oparta o&nbsp;<a href="http://code.google.com/p/language-detection/">http://code.google.com/p/language-detection/</a>). &nbsp;W tym celu dodajemy następujący update request processor do pliku <em>solrconfig.xml</em>:
</p>
<pre class="brush:xml">&lt;updateRequestProcessorChain name="langid"&gt;
  &lt;processor name="langid" class="org.apache.solr.update.processor.TikaLanguageIdentifierUpdateProcessorFactory"&gt;
    &lt;lst name="defaults"&gt;
      &lt;str name="langid.fl"&gt;title,body&lt;/str&gt;
      &lt;str name="langid.langField"&gt;lang&lt;/str&gt;
    &lt;/lst&gt;
  &lt;/processor&gt;
  &lt;processor class="solr.LogUpdateProcessorFactory" /&gt;
  &lt;processor class="solr.RunUpdateProcessorFactory" /&gt;
&lt;/updateRequestProcessorChain&gt;</pre>
<p>Inne parametry <em>TikaLanguageIdentifierUpdateProcessorFactory</em> opisane są na wiki Apache Solr pod adresem:&nbsp;<a href="http://wiki.apache.org/solr/LanguageDetection">http://wiki.apache.org/solr/LanguageDetection</a>.</p>
<h3>Dodatkowe, potrzebne biblioteki</h3>
<p>Aby powyższa zmiana zaczęła działać potrzebujemy jeszcze dodatkowych bibliotek, a dokładniej jednej biblioteki. Z katalogu <em>dist</em>, który znajduje się w dystrybucji Solr kopiujemy plik <em>apache-solr-langid-3.5.0.jar</em>&nbsp;do np. katalogu <em>tikaDir</em>, który tworzyny na tym samym poziomie co katalog <em>webapps</em>&nbsp;w Solr. Oraz dodajemy następującą linię do pliku <em>solrconfig.xml</em>:
</p>
<pre class="brush:xml">&lt;lib dir="../tikaLib/" regex="apache-solr-langid-\d.*\.jar" /&gt;</pre>
<p>Następna biblioteka, której potrzebujemy to Tika wraz z przyległościami (<em>tika-app-1.0.jar</em>) dostępna np. pod adresem:&nbsp;<a href="http://tika.apache.org/">http://tika.apache.org/</a>. Po skopiowaniu do katalogu <em>tikaDir</em>&nbsp;dodajemy następujący wpis do pliku <em>solrconfig.xml:</em>
</p>
<pre class="brush:xml">&lt;lib dir="../tikaLib/" regex="tika-app-1.0.jar" /&gt;</pre>
<h3>Testowe dokumenty</h3>
<p>Do testów przygotowałem trzy dokumenty zawierające po jednym dokumencie w języku angielskim, polskim oraz niemieckim. Ich treść została pobrana z Wikipedii. Wyglądają następująco:</p>
<h4>tika_en.xml</h4>
<pre class="brush:xml">&lt;add&gt;
&lt;doc&gt;
  &lt;field name="id"&gt;1&lt;/field&gt;
  &lt;field name="title"&gt;Water&lt;/field&gt;
  &lt;field name="body"&gt;Water is a chemical substance with the chemical formula H2O. A water molecule contains one oxygen and two hydrogen atoms connected by covalent bonds. Water is a liquid at ambient conditions, but it often co-exists on Earth with its solid state, ice, and gaseous state (water vapor or steam). Water also exists in a liquid crystal state near hydrophilic surfaces.[1][2] Under nomenclature used to name chemical compounds, Dihydrogen monoxide is the scientific name for water, though it is almost never used.&lt;/field&gt;
&lt;/doc&gt;
&lt;/add&gt;</pre>
<h4>tika_pl.xml</h4>
<pre class="brush:xml">&lt;add&gt;
&lt;doc&gt;
  &lt;field name="id"&gt;2&lt;/field&gt;
  &lt;field name="title"&gt;Woda&lt;/field&gt;
  &lt;field name="body"&gt;Woda (tlenek wodoru; nazwa systematyczna IUPAC: oksydan) – związek chemiczny o wzorze H2O, występujący w warunkach standardowych w stanie ciekłym. W stanie gazowym wodę określa się mianem pary wodnej, a w stałym stanie skupienia – lodem. Słowo woda jako nazwa związku chemicznego może się odnosić do każdego stanu skupienia.&lt;/field&gt;
&lt;/doc&gt;
&lt;/add&gt;</pre>
<h4>tika_de.xml</h4>
<pre class="brush:xml">&lt;add&gt;
&lt;doc&gt;
  &lt;field name="id"&gt;3&lt;/field&gt;
  &lt;field name="title"&gt;Wasser&lt;/field&gt;
  &lt;field name="body"&gt;Wasser (H2O) ist eine chemische Verbindung aus den Elementen Sauerstoff (O) und Wasserstoff (H). Wasser ist die einzige chemische Verbindung auf der Erde, die in der Natur in allen drei Aggregatzuständen vorkommt. Die Bezeichnung Wasser wird dabei besonders für den flüssigen Aggregatzustand verwendet. Im festen (gefrorenen) Zustand spricht man von Eis, im gasförmigen Zustand von Wasserdampf.&lt;/field&gt;
&lt;/doc&gt;
&lt;/add&gt;</pre>
<h3>Testowanie działania</h3>
<p>Aby zaindeksować dane wywołałem następującą serię poleceń:
</p>
<pre class="brush:xml">curl 'http://localhost:8983/solr/update?update.chain=langid' --data-binary @tika_pl.xml -H 'Content-type:application/xml'
curl 'http://localhost:8983/solr/update?update.chain=langid' --data-binary @tika_en.xml -H 'Content-type:application/xml'
curl 'http://localhost:8983/solr/update?update.chain=langid' --data-binary @tika_de.xml -H 'Content-type:application/xml'
curl 'http://localhost:8983/solr/update?update.chain=langid' --data-binary '&lt;commit/&gt;' -H 'Content-type:application/xml'</pre>
<p>Warto zauważyć, dodatkowy parameter <em>update.chain=langid</em>&nbsp;dodawany do requestu. Określna on update processor jaki powinien zostać użyty do przetwarzania danych. W tym wypadku chcemy, aby był to nasz zdefiniowany update processor.</p>
<h3>Zaindeksowane dane</h3>
<p>Sprawdźmy zatem co zostało zaindeksowane. Zróbmy to poprzez wysłanie następującego zapytania: <em>q=*:*&amp;indent=true</em>.
</p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;response&gt;
&lt;lst name="responseHeader"&gt;
  &lt;int name="status"&gt;0&lt;/int&gt;
  &lt;int name="QTime"&gt;0&lt;/int&gt;
  &lt;lst name="params"&gt;
    &lt;str name="indent"&gt;true&lt;/str&gt;
    &lt;str name="q"&gt;*:*&lt;/str&gt;
  &lt;/lst&gt;
&lt;/lst&gt;
&lt;result name="response" numFound="3" start="0"&gt;
  &lt;doc&gt;
    &lt;str name="body"&gt;Woda (tlenek wodoru; nazwa systematyczna IUPAC: oksydan) – związek chemiczny o wzorze H2O, występujący w warunkach standardowych w stanie ciekłym. W stanie gazowym wodę określa się mianem pary wodnej, a w stałym stanie skupienia – lodem. Słowo woda jako nazwa związku chemicznego może się odnosić do każdego stanu skupienia.&lt;/str&gt;
    &lt;str name="id"&gt;2&lt;/str&gt;
    &lt;str name="lang"&gt;pl&lt;/str&gt;
    &lt;str name="title"&gt;Woda&lt;/str&gt;
  &lt;/doc&gt;
  &lt;doc&gt;
    &lt;str name="body"&gt;Water is a chemical substance with the chemical formula H2O. A water molecule contains one oxygen and two hydrogen atoms connected by covalent bonds. Water is a liquid at ambient conditions, but it often co-exists on Earth with its solid state, ice, and gaseous state (water vapor or steam). Water also exists in a liquid crystal state near hydrophilic surfaces.[1][2] Under nomenclature used to name chemical compounds, Dihydrogen monoxide is the scientific name for water, though it is almost never used.&lt;/str&gt;
    &lt;str name="id"&gt;1&lt;/str&gt;
    &lt;str name="lang"&gt;en&lt;/str&gt;
    &lt;str name="title"&gt;Water&lt;/str&gt;
  &lt;/doc&gt;
  &lt;doc&gt;
    &lt;str name="body"&gt;Wasser (H2O) ist eine chemische Verbindung aus den Elementen Sauerstoff (O) und Wasserstoff (H). Wasser ist die einzige chemische Verbindung auf der Erde, die in der Natur in allen drei Aggregatzuständen vorkommt. Die Bezeichnung Wasser wird dabei besonders für den flüssigen Aggregatzustand verwendet. Im festen (gefrorenen) Zustand spricht man von Eis, im gasförmigen Zustand von Wasserdampf.&lt;/str&gt;
    &lt;str name="id"&gt;3&lt;/str&gt;
    &lt;str name="lang"&gt;de&lt;/str&gt;
    &lt;str name="title"&gt;Wasser&lt;/str&gt;
  &lt;/doc&gt;
&lt;/result&gt;
&lt;/response&gt;</pre>
<p>Jak widać, Solr przy pomocy biblioteki Tika, był w stanie poprawnie określić język trzech dokumentów jakie wysłaliśmy do indeksowania. Oczywiście, nie cieszmy się zbyt wcześnie, ponieważ pomyłki będą się zdarzać, szczególnie w przypadku, kiedy w ramach jednego dokumentu wykorzystywanych jest wiele języków.</p>
<h3>Podsumowanie</h3>
<p>Należy pamiętać, iż funkcjonalność detekcji języka dokumentu nie jest idealna i może się mylić. Dodatkowo, im dłuższe dokumenty, tym dokładniej będzie działać opisywana funkcjonalność. Oczywiście problemem jest to, że nie jesteśmy w stanie wykrywać języka podczas wyszukiwania, jednak nie jest to tylko problem Solr. Z tym możemy radzić sobie poprzez identyfikację przeglądarki użytkownika, języka w niej wykorzystywanej, bądź identyfikacji miejsca z którego łączy się do naszej aplikacji.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://solr.pl/2012/01/23/identyfikacja-jezyka-dokumentu/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
