Apresentando a missão
Postado em
Eu tenho pensado em fazer essa jóia rubi por um tempo. Foi originalmente chamado de “texto-cheddar”, mas decidi que algo que parecia mais divertido seria melhor. Por um tempo, eu estava tentando reescrever essa biblioteca em C e nomeou o Repo Quesadilla. Acontece que escrever extensões C que manipula as cordas é realmente difícil, então agora a versão Ruby se chama Quesadilla.
Quesadilla é um analisador de texto no estilo de entidade. Quesadilla foi extraído do cheddar. É o que alimenta todo o texto de Cheddar analisando. Foi inspirado um pouco por Entidade de tweet do Twitter.
Como Cheddar trabalha no iOS e Mac (assim como na web), eu precisava de algo que pudesse me dar faixas para coisas especiais no texto. iOS e Mac convertem isso para um NSAttributedString usando os índices incluídos em cada entidade. Aqui está a fonte de como o cheddar para iOS o faz no Objective-C.
Também usamos quesadilla em gangorra (meu trabalho diário). Funciona muito bem para nós lá também.
Quesadilla suporta extrair o seguinte:
- Markdown (itálico, ousado, ousado em itálico, striketrough, código e links)
- Links
- Nomeado emoji
- Hashtags
- Menciona o usuário
Aqui está um pequeno exemplo de como é uma hashtag:
Quesadilla.extract('Some #awesome text')
# => {
# display_text: "Some #awesome text",
# display_html: "Some #awesome text",
# entities: (
# {
# type: "hashtag",
# text: "#awesome",
# display_text: "#awesome",
# indices: (5, 13),
# hashtag: "awesome",
# display_indices: (5, 13)
# }
# )
# }
Você pode até fornecer um validador de usuário personalizado:
validator = lambda do |username|
# User.where('LOWER(username) = ?', username.downcase).first.try(:id)
username == 'soffes'
end
extraction = Quesadilla.extract('Real @soffes and fake @nobody', users: true, user_validator: validator)
# An entity for `soffes` will be added, but not for `nobody`
De qualquer forma, Quesadilla faz muitas coisas. Confira o ReadMe para mais ou leia a documentação. Ele é testado no Ruby 1.9.2, Ruby 1.9.3, Ruby 2.0.0, Jruby 1.7.2 (modo 1.9) e Rubinius 2.0.0 (modo 1.9), por isso deve funcionar para você.
Bata no Twitter Se você achar isso útil. Aproveitar!
