Merge pull request #827 from davidar/spell
[enh] show spelling corrections
This commit is contained in:
		
						commit
						b1d49bacb0
					
				| @ -112,6 +112,7 @@ title_xpath = './/h3' | |||||||
| content_xpath = './/span[@class="st"]' | content_xpath = './/span[@class="st"]' | ||||||
| content_misc_xpath = './/div[@class="f slp"]' | content_misc_xpath = './/div[@class="f slp"]' | ||||||
| suggestion_xpath = '//p[@class="_Bmc"]' | suggestion_xpath = '//p[@class="_Bmc"]' | ||||||
|  | spelling_suggestion_xpath = '//a[@class="spell"]' | ||||||
| 
 | 
 | ||||||
| # map : detail location | # map : detail location | ||||||
| map_address_xpath = './/div[@class="s"]//table//td[2]/span/text()' | map_address_xpath = './/div[@class="s"]//table//td[2]/span/text()' | ||||||
| @ -275,6 +276,9 @@ def response(resp): | |||||||
|         # append suggestion |         # append suggestion | ||||||
|         results.append({'suggestion': extract_text(suggestion)}) |         results.append({'suggestion': extract_text(suggestion)}) | ||||||
| 
 | 
 | ||||||
|  |     for correction in dom.xpath(spelling_suggestion_xpath): | ||||||
|  |         results.append({'correction': extract_text(correction)}) | ||||||
|  | 
 | ||||||
|     # return results |     # return results | ||||||
|     return results |     return results | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -127,6 +127,7 @@ class ResultContainer(object): | |||||||
|         self.infoboxes = [] |         self.infoboxes = [] | ||||||
|         self.suggestions = set() |         self.suggestions = set() | ||||||
|         self.answers = set() |         self.answers = set() | ||||||
|  |         self.corrections = set() | ||||||
|         self._number_of_results = [] |         self._number_of_results = [] | ||||||
|         self._ordered = False |         self._ordered = False | ||||||
|         self.paging = False |         self.paging = False | ||||||
| @ -140,6 +141,9 @@ class ResultContainer(object): | |||||||
|             elif 'answer' in result: |             elif 'answer' in result: | ||||||
|                 self.answers.add(result['answer']) |                 self.answers.add(result['answer']) | ||||||
|                 results.remove(result) |                 results.remove(result) | ||||||
|  |             elif 'correction' in result: | ||||||
|  |                 self.corrections.add(result['correction']) | ||||||
|  |                 results.remove(result) | ||||||
|             elif 'infobox' in result: |             elif 'infobox' in result: | ||||||
|                 self._merge_infobox(result) |                 self._merge_infobox(result) | ||||||
|                 results.remove(result) |                 results.remove(result) | ||||||
|  | |||||||
| @ -16,6 +16,18 @@ | |||||||
|             <h1 class="sr-only">{{ _('Search results') }}</h1> |             <h1 class="sr-only">{{ _('Search results') }}</h1> | ||||||
|             {% include 'oscar/search.html' %} |             {% include 'oscar/search.html' %} | ||||||
| 
 | 
 | ||||||
|  |             {% if corrections %} | ||||||
|  |             <div class="result"> | ||||||
|  |                 <span class="result_header text-muted form-inline pull-left suggestion_item">{{ _('Try searching for:') }}</span> | ||||||
|  |                 {% for correction in corrections %} | ||||||
|  |                     <form method="{{ method or 'POST' }}" action="{{ url_for('index') }}" role="navigation" class="form-inline pull-left suggestion_item"> | ||||||
|  |                         <input type="hidden" name="q" value="{{ correction }}"> | ||||||
|  |                         <button type="submit" class="btn btn-default btn-xs">{{ correction }}</button> | ||||||
|  |                     </form> | ||||||
|  |                 {% endfor %} | ||||||
|  |             </div> | ||||||
|  |             {% endif %} | ||||||
|  | 
 | ||||||
|             {% if answers %} |             {% if answers %} | ||||||
|             {% for answer in answers %} |             {% for answer in answers %} | ||||||
|             <div class="result well"> |             <div class="result well"> | ||||||
|  | |||||||
| @ -479,6 +479,7 @@ def index(): | |||||||
|                                     'number_of_results': number_of_results, |                                     'number_of_results': number_of_results, | ||||||
|                                     'results': results, |                                     'results': results, | ||||||
|                                     'answers': list(result_container.answers), |                                     'answers': list(result_container.answers), | ||||||
|  |                                     'corrections': list(result_container.corrections), | ||||||
|                                     'infoboxes': result_container.infoboxes, |                                     'infoboxes': result_container.infoboxes, | ||||||
|                                     'suggestions': list(result_container.suggestions)}), |                                     'suggestions': list(result_container.suggestions)}), | ||||||
|                         mimetype='application/json') |                         mimetype='application/json') | ||||||
| @ -515,6 +516,7 @@ def index(): | |||||||
|         advanced_search=advanced_search, |         advanced_search=advanced_search, | ||||||
|         suggestions=result_container.suggestions, |         suggestions=result_container.suggestions, | ||||||
|         answers=result_container.answers, |         answers=result_container.answers, | ||||||
|  |         corrections=result_container.corrections, | ||||||
|         infoboxes=result_container.infoboxes, |         infoboxes=result_container.infoboxes, | ||||||
|         paging=result_container.paging, |         paging=result_container.paging, | ||||||
|         current_language=search_query.lang, |         current_language=search_query.lang, | ||||||
|  | |||||||
| @ -36,6 +36,7 @@ class ViewsTestCase(SearxTestCase): | |||||||
|         def search_mock(search_self, *args): |         def search_mock(search_self, *args): | ||||||
|             search_self.result_container = Mock(get_ordered_results=lambda: self.test_results, |             search_self.result_container = Mock(get_ordered_results=lambda: self.test_results, | ||||||
|                                                 answers=set(), |                                                 answers=set(), | ||||||
|  |                                                 corrections=set(), | ||||||
|                                                 suggestions=set(), |                                                 suggestions=set(), | ||||||
|                                                 infoboxes=[], |                                                 infoboxes=[], | ||||||
|                                                 results=self.test_results, |                                                 results=self.test_results, | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Adam Tauber
						Adam Tauber