X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/ba8ed7967dc8450eb797e627809edafd3859acf7..143ff1446656ee995356c7a7b5eaa624140c70d8:/lib-php/tokenizer/legacy_icu_tokenizer.php?ds=sidebyside diff --git a/lib-php/tokenizer/legacy_icu_tokenizer.php b/lib-php/tokenizer/legacy_icu_tokenizer.php index 09cfe70f..96a1d8a6 100644 --- a/lib-php/tokenizer/legacy_icu_tokenizer.php +++ b/lib-php/tokenizer/legacy_icu_tokenizer.php @@ -47,9 +47,7 @@ class Tokenizer private function makeStandardWord($sTerm) { - $sNorm = ' '.$this->oTransliterator->transliterate($sTerm).' '; - - return trim(str_replace(CONST_Abbreviations[0], CONST_Abbreviations[1], $sNorm)); + return trim($this->oTransliterator->transliterate(' '.$sTerm.' ')); } @@ -90,6 +88,7 @@ class Tokenizer foreach ($aPhrases as $iPhrase => $oPhrase) { $sNormQuery .= ','.$this->normalizeString($oPhrase->getPhrase()); $sPhrase = $this->makeStandardWord($oPhrase->getPhrase()); + Debug::printVar('Phrase', $sPhrase); if (strlen($sPhrase) > 0) { $aWords = explode(' ', $sPhrase); Tokenizer::addTokens($aTokens, $aWords); @@ -121,14 +120,14 @@ class Tokenizer // Try more interpretations for Tokens that could not be matched. foreach ($aTokens as $sToken) { - if ($sToken[0] == ' ' && !$oValidTokens->contains($sToken)) { - if (preg_match('/^ ([0-9]{5}) [0-9]{4}$/', $sToken, $aData)) { + if ($sToken[0] != ' ' && !$oValidTokens->contains($sToken)) { + if (preg_match('/^([0-9]{5}) [0-9]{4}$/', $sToken, $aData)) { // US ZIP+4 codes - merge in the 5-digit ZIP code $oValidTokens->addToken( $sToken, new Token\Postcode(null, $aData[1], 'us') ); - } elseif (preg_match('/^ [0-9]+$/', $sToken)) { + } elseif (preg_match('/^[0-9]+$/', $sToken)) { // Unknown single word token with a number. // Assume it is a house number. $oValidTokens->addToken( @@ -196,17 +195,27 @@ class Tokenizer ) { $oToken = new Token\Country($iId, $aWord['country_code']); } + } elseif ($aWord['word_token'][0] == ' ') { + $oToken = new Token\Word( + $iId, + $aWord['word_token'][0] != ' ', + (int) $aWord['count'], + substr_count($aWord['word_token'], ' ') + ); } else { - $oToken = new Token\Word( + $oToken = new Token\Partial( $iId, - $aWord['word_token'][0] != ' ', - (int) $aWord['count'], - substr_count($aWord['word_token'], ' ') + (int) $aWord['count'] ); } if ($oToken) { - $oValidTokens->addToken($aWord['word_token'], $oToken); + // remove any leading spaces + if ($aWord['word_token'][0] == ' ') { + $oValidTokens->addToken(substr($aWord['word_token'], 1), $oToken); + } else { + $oValidTokens->addToken($aWord['word_token'], $oToken); + } } } }