xref: /aosp_15_r20/external/icing/icing/expand/stemming/stemmer-factory.h (revision 8b6cd535a057e39b3b86660c4aa06c99747c2136)
1*8b6cd535SAndroid Build Coastguard Worker // Copyright (C) 2024 Google LLC
2*8b6cd535SAndroid Build Coastguard Worker //
3*8b6cd535SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
4*8b6cd535SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
5*8b6cd535SAndroid Build Coastguard Worker // You may obtain a copy of the License at
6*8b6cd535SAndroid Build Coastguard Worker //
7*8b6cd535SAndroid Build Coastguard Worker //      http://www.apache.org/licenses/LICENSE-2.0
8*8b6cd535SAndroid Build Coastguard Worker //
9*8b6cd535SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
10*8b6cd535SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
11*8b6cd535SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*8b6cd535SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
13*8b6cd535SAndroid Build Coastguard Worker // limitations under the License.
14*8b6cd535SAndroid Build Coastguard Worker 
15*8b6cd535SAndroid Build Coastguard Worker #ifndef ICING_EXPAND_STEMMING_STEMMER_FACTORY_H_
16*8b6cd535SAndroid Build Coastguard Worker #define ICING_EXPAND_STEMMING_STEMMER_FACTORY_H_
17*8b6cd535SAndroid Build Coastguard Worker 
18*8b6cd535SAndroid Build Coastguard Worker #include <memory>
19*8b6cd535SAndroid Build Coastguard Worker #include <string>
20*8b6cd535SAndroid Build Coastguard Worker 
21*8b6cd535SAndroid Build Coastguard Worker #include "icing/text_classifier/lib3/utils/base/statusor.h"
22*8b6cd535SAndroid Build Coastguard Worker #include "icing/expand/stemming/stemmer.h"
23*8b6cd535SAndroid Build Coastguard Worker 
24*8b6cd535SAndroid Build Coastguard Worker namespace icing {
25*8b6cd535SAndroid Build Coastguard Worker namespace lib {
26*8b6cd535SAndroid Build Coastguard Worker 
27*8b6cd535SAndroid Build Coastguard Worker namespace stemmer_factory {
28*8b6cd535SAndroid Build Coastguard Worker 
29*8b6cd535SAndroid Build Coastguard Worker // Creates a stemmer for the given language code.
30*8b6cd535SAndroid Build Coastguard Worker //
31*8b6cd535SAndroid Build Coastguard Worker // The language code should be a IETF BCP 47 language tag.
32*8b6cd535SAndroid Build Coastguard Worker //   - E.g. "en" for English, "fr" for French, etc.
33*8b6cd535SAndroid Build Coastguard Worker //   - See https://en.wikipedia.org/wiki/IETF_language_tag for more
34*8b6cd535SAndroid Build Coastguard Worker //     information.
35*8b6cd535SAndroid Build Coastguard Worker //
36*8b6cd535SAndroid Build Coastguard Worker // This is the header file for the factory function. Implementations are in the
37*8b6cd535SAndroid Build Coastguard Worker // .cc files, and we select which stemmer and .cc file to build with in each
38*8b6cd535SAndroid Build Coastguard Worker // build rule.
39*8b6cd535SAndroid Build Coastguard Worker //
40*8b6cd535SAndroid Build Coastguard Worker // Returns:
41*8b6cd535SAndroid Build Coastguard Worker //  - A stemmer on success
42*8b6cd535SAndroid Build Coastguard Worker //  - INVALID_ARGUMENT_ERROR if the language code is invalid or not supported.
43*8b6cd535SAndroid Build Coastguard Worker libtextclassifier3::StatusOr<std::unique_ptr<Stemmer>> Create(
44*8b6cd535SAndroid Build Coastguard Worker     std::string language_code);
45*8b6cd535SAndroid Build Coastguard Worker 
46*8b6cd535SAndroid Build Coastguard Worker // Whether stemming is enabled.
47*8b6cd535SAndroid Build Coastguard Worker //
48*8b6cd535SAndroid Build Coastguard Worker // This is false for the none-stemmer implementation and true for the
49*8b6cd535SAndroid Build Coastguard Worker // snowball-stemmer implementation.
50*8b6cd535SAndroid Build Coastguard Worker bool IsStemmingEnabled();
51*8b6cd535SAndroid Build Coastguard Worker 
52*8b6cd535SAndroid Build Coastguard Worker }  // namespace stemmer_factory
53*8b6cd535SAndroid Build Coastguard Worker 
54*8b6cd535SAndroid Build Coastguard Worker }  // namespace lib
55*8b6cd535SAndroid Build Coastguard Worker }  // namespace icing
56*8b6cd535SAndroid Build Coastguard Worker 
57*8b6cd535SAndroid Build Coastguard Worker #endif  // ICING_EXPAND_STEMMING_STEMMER_FACTORY_H_
58