RkBlog

Hardware, programming and astronomy tutorials and reviews.

Google CSE - jak zrobyć wyszukiwarkę "o Pythonie" :)

Google udostępnia usługę Custom Search Engine - CSE umożliwiającą skonfigurowanie wyszukiwarki Google tak, by zwracała bardziej dopasowane wyniki do naszych założeń. Usługa zbyt popularna nie jest (do przes

Google udostępnia usługę Custom Search Engine - CSE umożliwiającą skonfigurowanie wyszukiwarki Google tak, by zwracała bardziej dopasowane wyniki do naszych założeń. Usługa zbyt popularna nie jest (do przeszukiwania własnej strony używamy np. Google Ajax search) i jest dość złożona, lecz umożliwia znaczącą konfigurację zwracanych wyników.

Przykładowo gdy chcemy mieć wyszukiwarkę szukająca informacji o Pythonowych frameworkach to wyniki dotyczące Rainharda Django czy pylonów konstrukcyjnych (pylons) nie są tym czego chcemy...

Oto prosty plik XML konfigurujący wyszukiwarkę CSE:
<?xml version="1.0" encoding="UTF-8" ?>
<GoogleCustomizations>
    <CustomSearchEngine>
        <Title>Python-Search</Title>
        <Description>Python-Search</Description>
        <Context>
           <BackgroundLabels>
             <Label name="pylabel" mode="BOOST" weight="0.8" />
          </BackgroundLabels>

        </Context>
    </CustomSearchEngine>
		<Include type="Annotations" href="http://www.google.com/cse/tools/makecse?url=http://www.google.com/search?q=python+$q&amp;btnG=Search&amp;num=100&amp;label=pylabel"/>
	<Annotations>
			<Annotation about="http://wiki.pylonshq.com/*">
				<Label name="pylabel"/>
			</Annotation>
			<Annotation about="http://pylonshq.com/*">
				<Label name="pylabel"/>
			</Annotation>
			<Annotation about="http://www.djangoproject.com/*">
				<Label name="pylabel"/>
			</Annotation>
			<Annotation about="http://code.djangoproject.com/*">
				<Label name="pylabel"/>
			</Annotation>
			<Annotation about="http://www.djangobook.com/*">
				<Label name="pylabel"/>
			</Annotation>
			<Annotation about="http://docs.python.org/lib/*">
				<Label name="pylabel"/>
			</Annotation>
			<Annotation about="http://docs.python.org/dev/*">
				<Label name="pylabel"/>
			</Annotation>
			<Annotation about="http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/*">
				<Label name="pylabel"/>
			</Annotation>
		</Annotations>
</GoogleCustomizations>
Użyłem własną etykietę (label) "pylabel" używaną domyślnie - "w tle":
<BackgroundLabels>
             <Label name="pylabel" mode="BOOST" weight="0.8" />
</BackgroundLabels>
Jej celem to promowanie wyników (BOOST) z podanych w adnotacjach stron. W adnotacjach mamy różne strony w tym dokumentację Django, wiki Pylons, czy też automatycznie generowane adnotacje ze strony z wynikami wyszukiwania dla "FRAZA+python", np "pylons+python". Szukając informacji o dekoratorach - "decorators" mamy już nieco inne wyniki (CSE po lewej, Google po prawej):
cse1
Wyniki jeszcze nie oszałamiają, lecz możemy też ograniczyć wyniki do określonych stron:
<?xml version="1.0" encoding="UTF-8" ?>
<GoogleCustomizations>
    <CustomSearchEngine>
        <Title>Python-Search</Title>
        <Description>Python-Search</Description>
        <Context>
           <BackgroundLabels>
             <Label name="pylabel" mode="BOOST" weight="0.8" />
          </BackgroundLabels>
	<Synonyms>
        <SynonymEntry word="pylons">
          <Synonym>pylons framework</Synonym>
        </SynonymEntry>
        <SynonymEntry word="pylons">
          <Synonym>pylons python</Synonym>
        </SynonymEntry>
     </Synonyms>

        </Context>
	<Context refinementsTitle="Search for $q in categories:">
     <Facet>
       <FacetItem title="Python">
         <Label name="pylabel" mode="BOOST" weight="0.8">
            <IgnoreBackgroundLabels>true</IgnoreBackgroundLabels>
         </Label>
       </FacetItem>
     </Facet>
      <Facet>
       <FacetItem title="Pylons">
         <Label name="pylons" mode="FILTER">
            <IgnoreBackgroundLabels>true</IgnoreBackgroundLabels>
         </Label>
       </FacetItem>
     </Facet>
     <Facet>
       <FacetItem title="Django">
         <Label name="django" mode="FILTER">
            <IgnoreBackgroundLabels>true</IgnoreBackgroundLabels>
         </Label>
       </FacetItem>
     </Facet>
     <Facet>
       <FacetItem title="Python Reference">
         <Label name="pyreference" mode="FILTER">
            <IgnoreBackgroundLabels>true</IgnoreBackgroundLabels>
         </Label>
       </FacetItem>
     </Facet>
     </Context>
    </CustomSearchEngine>
		<Include type="Annotations" href="http://www.google.com/cse/tools/makecse?url=http://www.google.com/search?q=python+language&amp;btnG=Search&amp;num=100&amp;label=pylabel"/>
		<Include type="Annotations" href="http://www.google.com/cse/tools/makecse?url=http://www.google.com/search?q=jython&amp;btnG=Search&amp;num=100&amp;label=pylabel"/>
		<Include type="Annotations" href="http://www.google.com/cse/tools/makecse?url=http://www.google.com/search?q=ironpython&amp;btnG=Search&amp;num=100&amp;label=pylabel"/>
		<Include type="Annotations" href="http://www.google.com/cse/tools/makecse?url=http://www.google.com/search?q=django+framework&amp;btnG=Search&amp;num=100&amp;label=pylabel"/>
		<Include type="Annotations" href="http://www.google.com/cse/tools/makecse?url=http://www.google.com/search?q=pylons+framework&amp;btnG=Search&amp;num=100&amp;label=pylabel"/>
		<Include type="Annotations" href="http://www.google.com/cse/tools/makecse?url=http://www.google.com/search?q=pyqt&amp;btnG=Search&amp;num=100&amp;label=pylabel"/>
		<Include type="Annotations" href="http://www.google.com/cse/tools/makecse?url=http://www.google.com/search?q=pygtk&amp;btnG=Search&amp;num=100&amp;label=pylabel"/>
		<Include type="Annotations" href="http://www.google.com/cse/tools/makecse?url=http://www.google.com/search?q=python+$q&amp;btnG=Search&amp;num=100&amp;label=pylabel"/>
		
		<Include type="Annotations" href="http://www.google.com/cse/tools/makecse?url=http://www.google.com/search?q=pylons+framework&amp;btnG=Search&amp;num=100&amp;label=pylons"/>
		<Include type="Annotations" href="http://www.google.com/cse/tools/makecse?url=http://www.google.com/search?q=pylons+python&amp;btnG=Search&amp;num=100&amp;label=pylons"/>
		<Include type="Annotations" href="http://www.google.com/cse/tools/makecse?url=http://www.google.com/search?q=pylons+python+$q&amp;btnG=Search&amp;num=100&amp;label=pylons"/>
		<Include type="Annotations" href="http://www.google.com/cse/tools/makecse?url=http://www.google.com/search?q=pylons+framework+$q&amp;btnG=Search&amp;num=100&amp;label=pylons"/>
		
		<Include type="Annotations" href="http://www.google.com/cse/tools/makecse?url=http://www.google.com/search?q=django+framework&amp;btnG=Search&amp;num=100&amp;label=django"/>
		<Include type="Annotations" href="http://www.google.com/cse/tools/makecse?url=http://www.google.com/search?q=django+python&amp;btnG=Search&amp;num=100&amp;label=django"/>
		<Include type="Annotations" href="http://www.google.com/cse/tools/makecse?url=http://www.google.com/search?q=django+framework+$q&amp;btnG=Search&amp;num=100&amp;label=django"/>
		<Include type="Annotations" href="http://www.google.com/cse/tools/makecse?url=http://www.google.com/search?q=django+python+$q&amp;btnG=Search&amp;num=100&amp;label=django"/>
	<Annotations>
			<Annotation about="http://docs.python.org/lib/*">
				<Label name="pylabel"/>
			</Annotation>
			<Annotation about="http://docs.python.org/dev/*">
				<Label name="pylabel"/>
			</Annotation>
			
			<Annotation about="http://wiki.pylonshq.com/*">
				<Label name="pylons"/>
			</Annotation>
			<Annotation about="http://pylonshq.com/*">
				<Label name="pylons"/>
			</Annotation>
			
			<Annotation about="http://docs.djangoproject.com/en/dev/*">
				<Label name="django"/>
			</Annotation>
			<Annotation about="http://code.djangoproject.com/wiki/*">
				<Label name="django"/>
			</Annotation>
			<Annotation about="http://www.djangobook.com/*">
				<Label name="django"/>
			</Annotation>
			
			<Annotation about="http://docs.python.org/lib/*">
				<Label name="pyreference"/>
			</Annotation>
			<Annotation about="http://docs.python.org/dev/*">
				<Label name="pyreference"/>
			</Annotation>
		</Annotations>
</GoogleCustomizations>
Dodałem dwie etykiety, z których możemy skorzystać do doprecyzowania wyszukiwania. Ich działanie (FILTER) powoduje wyświetlanie wyników wyłącznie ze stron podanych w adnotacjach. Szukanie frazy "decorators" dla Django i Pylons przynosi już bardziej konkretne wyniki.
cse2
cse3
Google CSE jest narzędziem o dużym potencjale przy budowaniu aplikacji biznesowych, w których liczy się wyszukiwanie specyficznych informacji.
RkBlog

Podstawy Pythona, 21 September 2008,

Comment article