You are here

protected function Stemmer::process in Search API 8

Processes a single string value.

This method is ultimately called for all text by the standard implementation, and does nothing by default.

Parameters

mixed $value: The value to preprocess, as a reference. Can be manipulated directly, nothing has to be returned. Since this can be called for all value types, $value has to remain the same type. The possible types for $value depend on shouldProcess().

Overrides FieldsProcessorPluginBase::process

See also

\Drupal\search_api\Processor\FieldsProcessorPluginBase::shouldProcess()

File

src/Plugin/search_api/processor/Stemmer.php, line 140

Class

Stemmer
Stems search terms.

Namespace

Drupal\search_api\Plugin\search_api\processor

Code

protected function process(&$value) {

  // In the absence of the tokenizer processor, this ensures split words.
  $words = preg_split('/[^\\p{L}\\p{N}]+/u', strip_tags($value), -1, PREG_SPLIT_NO_EMPTY);
  $stemmed = [];
  foreach ($words as $i => $word) {

    // To optimize processing, store processed stems in a static array.
    if (!isset($this->stems[$word])) {
      $stem = new Porter2($word, $this->configuration['exceptions']);
      $this->stems[$word] = $stem
        ->stem();
    }
    $stemmed[] = $this->stems[$word];
  }
  $value = implode(' ', $stemmed);
}