2015-11-25 2 views
0

У меня есть следующий текст:Tokenising/фильтрация текста с разметкой

Lurasidone is a dopamine D<sub>2</sub>

Я хотел бы разметить это такое, что я получаю следующие символы:

Lurasidone

допамина

D2

Как достичь этого, используя токенизатор или фильтр? Я пытался использовать HTML фильтр однако D<sub>2</sub> разбивается на лексемы как:

D

, тогда как мне нужно, чтобы это токенизировать как:

D2

+0

Можете ли вы показать, как вы использовали фильтр символов 'html_strip'? – Val

ответ

1

Вы можете использовать Pattern Replace Char Filter

Это то, что я и сделал.

"char_filter": { 
    "html_pattern": { 
     "type": "pattern_replace", 
     "pattern": "<.*>(.*)<\\/.*>", 
     "replacement": "$1" 
    } 
} 

я включил, что в моем custom analyzer как этот

"my_custom_analyzer": { 
    "tokenizer": "standard", 
    "char_filter": [ 
     "html_pattern" 
    ], 
    "filter": ["stop"] 
} 

Эти маркеры, сгенерированные для текста

{ 
    "tokens": [ 
     { 
     "token": "Lurasidone", 
     "start_offset": 0, 
     "end_offset": 10, 
     "type": "<ALPHANUM>", 
     "position": 1 
     }, 
     { 
     "token": "dopamine", 
     "start_offset": 16, 
     "end_offset": 24, 
     "type": "<ALPHANUM>", 
     "position": 4 
     }, 
     { 
     "token": "D2", 
     "start_offset": 25, 
     "end_offset": 38, 
     "type": "<ALPHANUM>", 
     "position": 5 
     } 
    ] 
} 

Я надеюсь, что это помогает.

+0

Это замечательно, огромное спасибо, что представляет собой $ 1? –

+0

Извините, забыли пояснить регулярное выражение, в основном я занимаюсь тем, что находится внутри html-тегов, а затем [обратная ссылка] (http://www.regular-expressions.info/backref.html). поэтому $ 1 представляет все между тегами html, которое в этом случае равно _2_ – ChintanShah25

Смежные вопросы