use DSL::Shared::Utilities::DeterminedWordsMatching;

# Recommender specific phrases
role DSL::Bulgarian::RecommenderWorkflows::Grammar::RecommenderPhrases {

    token word-spec { \w+ }

    # Regular tokens / rules
    token across-adverb { 'напречно' }
    token across-preposition { 'през' | 'чрез' }
    token aggregate-verb { 'агрегирай' | 'обедени' }
    token aggregation-noun { 'агрегация' | 'обединение' }
    token anomalies-noun { 'аномалии' }
    token anomaly-noun { 'аномалия' }
    token colnames-noun { 'colnames' }
    token consumption-noun { 'консумация' }
    token density-noun { 'гъстота' | 'разреденост' }
    token explain-verb { 'обясни' }
    token explanations-noun { 'обяснение' | 'обяснения' }
    token history-noun { 'история' }
    token item-noun { 'нещо' }
    token items-noun { 'неща' }
    token metadata-noun { 'мета-данни' | 'мета' \h* 'данни' }
    token most-determiner { 'повечето' }
    token profile-noun { 'профил' }
    token proofs-noun { 'доказателство' | 'доказателствa' | 'свидетелство' | 'свидетелства' }
    token properties-noun { 'свойства' | 'характеристики' }
    token property-noun { 'свойство' | 'характеристика' }
    token prove-verb { 'докажи' }
    token proximity-noun { 'близост' }
    token recommend-directive { <recommend-verb> }
    token recommend-verb { 'препоръчай' | 'внуши' }
    token recommendation-noun { 'препоръчка' | 'препоръка' }
    token recommendations-noun {  'препоръчки' | 'препоръки' }
    token recommended-adjective { 'препоръчан' | 'препоръчана' | 'препоръчено' | 'препоръчани' }
    token recommender-noun { 'препоръчител' | 'препоръчителка' }
    token relevant-adjective { 'подходящ' | 'подходяща' }
    token rownames-noun { 'rownames' }
    token tag-adjective { <tag-noun> }
    token tag-noun { 'етикет' }
    token sub-matrix-noun { 'под' \h+ '-' \h+ <matrix-noun> }
    token sub-matrices-noun { 'под' \h+ '-' \h+ <matrices-noun> }

    rule prove-directive { <prove-verb> | <explain-verb> }
    rule consumption-history { <consumption-noun>? <history-noun> }
    rule consumption-profile { <consumption-noun>? <profile-noun> }
    rule cross-tabulate-phrase { 'cross' [ 'tabulate' | 'tabulation' ] }
    rule extend-recommendations-phrase { <across-adverb> <join-noun> <recommendations-noun>? }
    rule history-phrase { [ <item-noun> ]? <history-noun> }
    rule most-relevant { <most-determiner> <relevant-adjective> }
    rule nearest-neighbors { <nearest-adjective> <neighbors-noun> | 'nns' }
    rule recommendation-matrices { [ <recommendation-noun> | <recommender-noun> ]? <matrices-noun> }
    rule recommendation-matrix { [ <recommendation-noun> | <recommender-noun> ]? <matrix-noun> }
    rule recommendation-results { [ <recommendation-noun> | <recommendations-noun> | <recommended-adjective> ] <results> }
    rule recommended-items { <recommended-adjective> <items-noun> | [ <recommendations-noun> | <recommendation-noun> ]  <.results>? }
    rule recommender-object-phrase { <recommender-noun> [ <object-noun> | <system-noun> ]? | 'smr' }
    rule sparse-matrix { <sparse-adjective> <matrix-noun> }
    rule sub-matrices-phrase { <sub-matrices-noun> | <sub-prefix> <matrices-noun> | <sub-prefix> <matrixes-noun> }
    rule sub-matrix-phrase { <sub-matrix-noun> | <sub-prefix> <matrix-noun> }
    rule tag-type-phrase { [ <tag-noun> | <tag-adjective> ] <type-noun> }
    rule tag-types-phrase { [ <tag-noun> | <tag-adjective> ] <types-noun> }
    rule what-are-phrase { <what-pronoun> [ <are-verb> | <is-verb> ] }


    # LSA specific
    token analysis-noun { 'анализ' }
    token entries-noun { 'елементи' }
    token indexing-noun { 'индексиране' }
    token latent-adjective { 'латентен' | 'латентно' }
    token semantic-adjective { 'семантичен' }
    token term-noun { 'термин' }

    rule doc-term-mat { [ <document-noun> | <item-noun> ] [ <term-noun> | <word-noun> ] <matrix-noun> }
    rule lsa-object { <lsa-phrase>? <object-noun> }
    rule lsa-phrase { <latent-adjective> <semantic-adjective> <analysis-noun> | 'lsa' | 'LSA' }
    rule lsi-phrase { <latent-adjective> <semantic-adjective> <indexing-noun> | 'lsi' | 'LSI' }
    rule matrix-entries { [ <doc-term-mat> | <matrix-noun> ]? <entries-noun> }
    rule the-outliers { <the-determiner> <outliers> }

    # LSI specific
    token frequency-noun { 'честота' }
    token global-adjective { 'глобален' | 'глобална' | 'глобално' | 'глобални' }
    token inverse-adjective { 'обратен' | 'обратна' | 'обратно' | 'обратни'  }
    token local-adjective { 'локален' | 'локална' | 'локално' | 'локални' }
    token normalization-noun { 'нормализация' | 'нормализиране' }
    token normalizer-noun { 'нормализатор' }
    token normalizing-noun { 'нормализиране' }

    rule global-function-phrase { <global-adjective> <term-noun> ?<weight-noun>? <function-noun> }
    rule join-type-phrase { <join-verb>? <type-noun> }
    rule local-function-phrase { <local-adjective> <term-noun>? <weight-noun>? <function-noun> }
    rule normalizer-function-phrase { [ <normalizer-noun> | <normalizing-noun> | <normalization-noun> ] <term-noun>? <weight-noun>? <function-noun>? }

}