Independente. Pequeno. Linguagem neutra.
Budoux é o sucessor de Budou, a ferramenta de organizador de quebra de linha de aprendizado de máquina.
É independente . Funciona sem dependência de segmentadores de palavras de terceiros, como o Google Cloud Natural Language API.
É pequeno . São necessários apenas cerca de 15 KB, incluindo seu modelo de aprendizado de máquina. É razoável usá-lo mesmo no lado do cliente.
É neutro em linguagem . Você pode treinar um modelo para qualquer idioma, alimentando um conjunto de dados ao script de treinamento de Budoux.
Por último, mas não menos importante, o Budoux suporta entradas HTML.
https://google.github.io/budoux
O coreano usa espaços entre as palavras, para que você possa impedir que as palavras sejam divididas através das linhas, aplicando a word-break: keep-all no parágrafo, que deve ser muito mais executado do que a instalação do Budoux. Dito isto, estamos felizes em explorar o suporte a idioma coreano dedicado se a solução acima for insuficiente.
$ pip install budouxVocê pode obter uma lista de frases alimentando uma frase ao analisador. A maneira mais fácil é obter um analisador está carregando o analisador padrão para cada idioma.
Japonês:
import budoux
parser = budoux . load_default_japanese_parser ()
print ( parser . parse ( '今日は天気です。' ))
# ['今日は', '天気です。']Chinês simplificado:
import budoux
parser = budoux . load_default_simplified_chinese_parser ()
print ( parser . parse ( '今天是晴天。' ))
# ['今天', '是', '晴天。']Chinês tradicional:
import budoux
parser = budoux . load_default_traditional_chinese_parser ()
print ( parser . parse ( '今天是晴天。' ))
# ['今天', '是', '晴天。']Tailandês:
import budoux
parser = budoux . load_default_thai_parser ()
print ( parser . parse ( 'วันนี้อากาศดี' ))
# ['วัน', 'นี้', 'อากาศ', 'ดี']Você também pode traduzir uma string html para envolver frases com marcação sem quebra. O analisador padrão usa espaço com largura zero (U+200b) para separar frases.
print ( parser . translate_html_string ( '今日は<b>とても天気</b>です。' ))
# <span style="word-break: keep-all; overflow-wrap: anywhere;">今日は<b>u200bとてもu200b天気</b>です。</span> Observe que os separadores são indicados como u200b no exemplo acima para fins ilustrativos, mas a saída real é uma string invisível, pois é um espaço de largura zero.
Se você possui um modelo personalizado, pode usá -lo da seguinte forma.
with open ( '/path/to/your/model.json' ) as f :
model = json . load ( f )
parser = budoux . Parser ( model )Um arquivo de modelo para Budoux é um arquivo JSON que contém pares de um recurso e sua pontuação extraída pelo treinamento de aprendizado de máquina. Cada pontuação representa o significado do recurso para determinar se deve quebrar a frase em um ponto específico.
Para obter mais detalhes do modelo JavaScript, consulte o JavaScript Module ReadMe.
Você também pode formatar entradas no seu terminal com o comando budoux .
$ budoux 本日は晴天です。 # default: japanese
本日は
晴天です。
$ budoux -l ja 本日は晴天です。
本日は
晴天です。
$ budoux -l zh-hans 今天天气晴朗。
今天
天气
晴朗。
$ budoux -l zh-hant 今天天氣晴朗。
今天
天氣
晴朗。
$ budoux -l th วันนี้อากาศดี
วัน
นี้
อากาศ
ดี $ echo $'本日は晴天です。 n明日は曇りでしょう。 ' | budoux
本日は
晴天です。
---
明日は
曇りでしょう。 $ budoux 本日は晴天です。 -H
<span style="word-break: keep-all; overflow-wrap: anywhere;">本日はu200b晴天です。</span> Observe que os separadores são indicados como u200b no exemplo acima para fins ilustrativos, mas a saída real é uma string invisível, pois é um espaço de largura zero.
Se você quiser ver ajuda, execute budoux -h .
$ budoux -h
usage: budoux [-h] [-H] [-m JSON | -l LANG] [-d STR] [-V] [TXT]
BudouX is the successor to Budou,
the machine learning powered line break organizer tool.
positional arguments:
TXT text (default: None)
optional arguments:
-h, --help show this help message and exit
-H, --html HTML mode (default: False)
-m JSON, --model JSON custom model file path (default: /path/to/budoux/models/ja.json)
-l LANG, --lang LANG language of custom model (default: None)
-d STR, --delim STR output delimiter in TEXT mode (default: ---)
-V, --version show program's version number and exit
supported languages of `-l`, `--lang`:
- ja
- zh-hans
- zh-hant
- th O Budoux suporta entradas e saídas de html html com marcas com marcas que envolvem frases, mas não deve ser usada como um desinfetante para HTML. Budoux não higieniza nenhuma entrada. As entradas HTML maliciosas produzem saídas HTML maliciosas. Use -o com uma biblioteca de desinfetagem apropriada se você não confiar na entrada.
O texto em inglês tem muitas pistas, como espaçamento e hifenação, que permitem quebras de linha bonitas e legíveis. No entanto, alguns idiomas CJK não têm essas pistas e, portanto, são notoriamente mais difíceis de processar. As quebras de linha podem ocorrer aleatoriamente e geralmente no meio de uma palavra ou frase sem uma abordagem mais cuidadosa. Esta é uma questão de longa data na tipografia na Web, o que resulta em uma degradação da legibilidade.
O Budou foi proposto como uma solução para esse problema em 2016. Traduz automaticamente frases CJK em HTML com frases lexicais embrulhadas em marcação sem quebra, de modo a controlar semanticamente quebras de linha. Budou resolveu esse problema até certo ponto, mas ainda tem alguns problemas para integrar o fluxo de trabalho de produção da Web moderno.
A maior barreira na aplicação de Budou em um site é que ele depende de segmentadores de palavras de terceiros. Geralmente, um segmento de palavras é um grande programa que é inviável para baixar para todas as solicitações da página da web. Também seria uma opção indesejável solicitar um serviço de segmentação de palavras baseado em nuvem para cada frase, considerando a velocidade e o custo. É por isso que precisamos de uma ferramenta de organizador de quebra de linha independente equipada com seu próprio mecanismo de segmentação pequeno o suficiente para ser agrupado em um código JavaScript do lado do cliente.
Budou X é o sucessor de Budou, projetado para ser integrado ao seu site, sem problemas.
O Budoux usa o algoritmo ADaboost para segmentar uma frase em frases, considerando a tarefa como um problema de classificação binária para prever se deve quebrar ou não entre todos os caracteres. Ele usa recursos como os caracteres ao redor do ponto de interrupção, seus blocos unicode e combinações deles para fazer uma previsão. O modelo de aprendizado de máquina de saída, que é codificado como um arquivo JSON, armazena pares do recurso e sua pontuação significativa. O analisador de Budoux pega um arquivo de modelo para construir um segmento e traduz frases de entrada em uma lista de frases.
Você pode criar seu próprio modelo personalizado para qualquer idioma, preparando dados de treinamento no idioma de destino. Um conjunto de dados de treinamento é um grande arquivo de texto que consiste em frases separadas por frases com o símbolo do separador "I" (U+2581), como abaixo.
私は▁遅刻魔で、▁待ち合わせに▁いつも▁遅刻してしまいます。
メールで▁待ち合わせ▁相手に▁一言、▁「ごめんね」と▁謝れば▁どうにか▁なると▁思っていました。
海外では▁ケータイを▁持っていない。
Supondo que o arquivo de texto seja salvo como mysource.txt , você pode criar seu próprio modelo personalizado executando os seguintes comandos.
$ pip install .[dev]
$ python scripts/encode_data.py mysource.txt -o encoded_data.txt
$ python scripts/train.py encoded_data.txt -o weights.txt
$ python scripts/build_model.py weights.txt -o mymodel.json Observe que o train.py leva tempo para concluir, dependendo dos recursos do seu computador. A boa notícia é que o algoritmo de treinamento é um algoritmo a qualquer momento, para que você possa obter um arquivo de pesos, mesmo se interromper a execução. Você pode criar um arquivo de modelo válido, passando que pesam o arquivo para build_model.py mesmo nesse caso.
O modelo padrão para japonês ( budoux/models/ja.json ) é construído usando o corpus KNBC. Você pode criar um conjunto de dados de treinamento, que chamamos de source_knbc.txt abaixo, por exemplo, do corpus executando os seguintes comandos:
$ curl -o knbc.tar.bz2 https://nlp.ist.i.kyoto-u.ac.jp/kuntt/KNBC_v1.0_090925_utf8.tar.bz2
$ tar -xf knbc.tar.bz2 # outputs KNBC_v1.0_090925_utf8 directory
$ python scripts/prepare_knbc.py KNBC_v1.0_090925_utf8 -o source_knbc.txt Shuhei Iitsuka
Este não é um produto do Google oficialmente suportado.