Módulo Discussão:Avaliação/Arquivo/1


Último comentário: 20 de junho de 2014 de Helder.wiki no tópico Testes e bugs

Língua e estilo

Está ficando muito bom Helder. Olhando o módulo me surgiram duas dúvidas, uma é, não seria melhor mantermos os módulos em português como as predefinições? A outra é meu estilo de programação, como já deve ter percebido por alguns de meus scripts, ele é diferente do seu e da maioria dos programadores, acha que esse modo de programar que estou acostumado atrapalha muito a legibilidade do script por ouros programadores? Tenho dificuldade de programar de outra forma, e tenho receio de tentar ajudar no módulo e acabar deixando ele muito bagunçado... Danilo.mac(discussão) 17h11min de 1 de novembro de 2013 (UTC)

Então Danilo.mac, até percebi isso do "bagunçado" ao ver o seu marcas.py, mas dá pra entender, então não se acanhe de fazer mudanças  . Acho que, pelo menos em um primeiro momento, seria bom conseguir uma versão em Lua equivalente a que tinha em Python, mesmo que não fique muito organizado. Eu tentei organizar quando dei início àquela versão em JS mas ficou pela metade.
Sobre o idioma, o ideal seria separar a "interface" (com mensagens e nomes de parâmetros traduzidos), que é o que que será utilizada pelos editores e o "corpo" do código (em inglês, por facilitar a reutilização em outras wikis). Uma tal separação permitiria que a interface pudesse ser traduzida facilmente entre idiomas, sem ter que ficar adaptando o restante do código (tanto antes quanto depois de ser implementado um repositório central para os módulos). Mas ainda não está claro como exatamente isso pode ser feito (lembro de ter visto uma discussão relacionada em mailarchive:wikitech-l/2013-May/069658.html e uns testes relacionados a i18n e Wikidata feitos pelo Rical). No caso deste módulo em particular, também gostaria que fosse possível ter um objeto em que certa wiki pudesse definir seus parâmetros/critérios de avaliação, e utilizá-los na função que faz a avaliação (sem deixar os valores hardcoded no meio do código principal). Mas isso pode ficar para um segundo momento. Helder 17h48min de 1 de novembro de 2013 (UTC)
Ok, estou traduzindo a função de avaliação do marcas.py para Lua, em breve coloco aqui no módulo. Quanto à língua, entendo que devemos facilitar para as outras wikis, mas acho que deveríamos deixar em inglês apenas os comentários e talvez as variáveis, acho que o nome do módulo e das funções deveriam sempre estar em português aqui na ptwiki, se eles quiserem usar o código, acho que traduzir o nome do módulo e das funções não será um grande problema para eles, ter tudo em inglês me dá uma sensação de algo feito para a enwiki, acho estranho. Vou tentar já separar os parâmetros de avaliação do restante do código. Danilo.mac(discussão) 16h48min de 11 de novembro de 2013 (UTC)
Danilo.mac, sabe me dizer se a versão atual está muito distante de poder ser utilizada no lugar do robô? Helder.wiki (discussão) 09h57min de 2 de fevereiro de 2014 (UTC)
Acho que falta a parte para detectar se existem referências em todas as seções e depois teria que passar para a {{marca de projeto}}. Lua é uma linguagem meio difícil de programar, por isso fui deixando isso meio de lado, mas este módulo é mesmo importante para Wikipédia, vou tentar retomar esta semana. Danilo.mac(discussão) 18h50min de 2 de fevereiro de 2014 (UTC)
[off-topic] Danilo.mac, surgiu uma discussão na Wikitech que talvez queira ver: mailarchive:wikitech-l/2013-December/073591.html. Helder.wiki (discussão) 12h01min de 12 de dezembro de 2013 (UTC)
Interessante a discussão, quem não é programador profissional tem mesmo dificuldade para programar no mesmo estilo deles, o Usuário:Danilo.mac/fastbuttons.js é um bom exemplo disso, o código não foi desenvolvido no estilo padrão dos programadores profissionais, mas foi útil à comunidade. Infelizmente alguns developers ainda não são abertos a esse tipo de colaboração "fora do padrão". Danilo.mac(discussão) 15h19min de 12 de dezembro de 2013 (UTC)

Por falar em organização de código, acho que uma indentação com um TAB de tamanho 8 ficaria melhor. Fora que no código está misturado indentações com espaço e com TAB. Tem que ser um, ou outro (TAB de preferência). Silent (discussão) 19h44min de 4 de fevereiro de 2014 (UTC)

Talvez a mistura de tabs e espaços tenha sido porque o código foi começado antes de gerrit:80843? Helder.wiki (discussão) 20h08min de 4 de fevereiro de 2014 (UTC)
Bem, não gosto muito de dar palpite sobre esses assuntos, pois o estilo que prefiro é diferente do estilo que a maioria dos programadores prefere, mas acho que essas diferenças realmente atrapalham um pouco a leitura do código. Eu prefiro indentação de 2 espaços (o código python do Google e o código do Ruby on Rails por exemplo usam indentação de 2 espaços), mas muitas vezes uso 4 porque sei que muitos não gostam de 2, 8 espaços eu acho exagerado. Também acho que atrapalha a leitura colocar muitas linhas em branco, por exemplo linhas em branco depois de cada for ou if. Outra coisa que acho que atrapalha é o HtmlBuilder, acho muito mais fácil escrever o HTML diretamente. Mas sei que a forma como eu programo também incomoda outros programadores, infelizmente não existe um estilo que todos se adaptem, enfim, é uma questão complicada. Danilo.mac(discussão) 00h48min de 18 de fevereiro de 2014 (UTC)
Mas é isso mesmo, é questão de gosto. Eu mesmo já vejo as linhas branco e o TAB de 8 espaços como uma forma de organizar melhor o código e facilitar a leitura, pois não mistura muito o código. Silent (discussão) 01h08min de 18 de fevereiro de 2014 (UTC)
Bom, pelo menos a parte da tabulação é simples de resolver, pois a extensão CodeEditor pode ser configurada conforme o gosto de cada um. No seu caso, se tomar este pequeno código escrito pelo Rillke e trocar "setUseSoftTabs(false)" por "setTabSize(2)" a indentação ficará do jeito que você prefere   (testei no console do Chrome). Helder.wiki (discussão) 12h30min de 18 de fevereiro de 2014 (UTC)

Testes e bugs

Alterei a {{marca de projeto/teste}} para usar o módulo para gerar a marca e fiz alguns testes. Um caso que ainda não sei como corrigir é o que acontece em Discussão:Projeto A119, ao colocar o "/teste" dá uns erros causados pelo parâmetro "3rev", escrito errado. Talvez seja bom colocar algo para categorizar páginas com parâmetros desconhecidos (que não sejam 'rev' ou 'bot') para um robô passar corrigindo. Danilo.mac(discussão) 03h32min de 22 de fevereiro de 2014 (UTC)

Parece que era só passar uma string vazia em vez de nil para a {{marca de projeto/projeto}}. Mas pode ser útil categorizar usos de parâmetros estranhos também (embora isso possa ser feito depois). Helder.wiki (discussão) 10h52min de 22 de fevereiro de 2014 (UTC)

Fiz mais alguns testes e correções. Melhorei a busca por parágrafos, antes estava pegando muito poucos parágrafos (Cordados por exemplo estava dando Q1 por ter 3 parágrafos), agora melhorou, mas ainda está deixando de pegar alguns parágrafos e pegando trechos que não são parágrafos, mas espero que não dê mais erros graves de avaliação por causa disso. Ando com pouco tempo ultimamente, assim que der faço mais alguns testes. Danilo.mac(discussão) 02h51min de 10 de março de 2014 (UTC)

Encontrei outro bug relacionado aos parágrafos no artigo Açucar, só que aqui parece ser algo relacionado ao Lua do MediaWiki. No meu computador tenho uma versão do módulo que uso para testes que não possui as bibliotecas do MediaWiki, e ao testar esse artigo deu qualidade 3, passou na verificação de parágrafos contando 20 parágrafos, acho que deve ser algo relacionado com as diferenças entre Lua original e o Lua do MediaWiki, mas não consegui descobrir o que é. Danilo.mac(discussão) 00h57min de 22 de março de 2014 (UTC)
Poderia gerar duas listas?
  1. Quais são os parágrafos segundo o seu código local?
  2. Quais são os parágrafos segundo o código que está na Wikipédia?
Isso pode ajudar a descobrir em que ponto está a diferença...
Já tentou instalar o MW com vagrant? Talvez seja mais fácil, por poder fazer testes com Lua em uma instalação local do MediaWiki. Helder.wiki (discussão) 13h11min de 22 de março de 2014 (UTC)
Minha suspeita é que pode ser por causa da diferença entre bytes e caracteres. Veja mw:Extension:Scribunto/Lua reference manual#Ustring library. Helder.wiki (discussão) 13h15min de 22 de março de 2014 (UTC)
Danilo.mac, no artigo Açúcar, a linha
text, n = text:gsub(refNoTemplates[i], '')
do módulo acaba removendo várias seções (de "== Riscos à Saúde ==" até "{{referências}}\n\n== "), então quando chega a verificação dos parágrafos há, de fato, só 5 parágrafos no texto.
Aparentemente, esta alteração na regex resolveu o problema. Helder.wiki (discussão) 19h13min de 13 de junho de 2014 (UTC)

Danilo.mac, qual o status atual da implementação da avaliação automática por meio deste módulo? Já faz um tempo desde que olhei o que estava sendo feito, então não lembro bem o que ainda precisa ser testado ou corrigido antes de completarmos a migração... Helder.wiki (discussão) 12h45min de 28 de abril de 2014 (UTC)

Aquela verificação do número de parágrafos estava bugada e eu não sabia como consertar, então removi essa verificação do módulo, com isso apareceu erro em outra verificação, agora na contagem de ligações internas, e tem o mesmo problema de acontecer no MediaWiki e não em um interpretador lua convencional. O módulo parece estar mais bugado do que eu imaginava, e Lua não é uma linguagem divertida de se programar, então acabei desanimando de insistir neste módulo, resolver esses bugs (e possivelmente outros que esses estão encobrindo) vai ser complicado. Danilo.mac(discussão) 15h40min de 28 de abril de 2014 (UTC)

Danilo.mac: por algum motivo, o loop for t in mw.ustring.gmatch(text, '{{ *([^|}\n]+)[ \n]*[|}]') do só está detectando as predefinições "Formatar referências" e "em tradução" no artigo Açúcar (isso pode ser confirmado colocando uma linha "mw.log( 'PREDEFINIÇÃO: ' .. t )" logo no início do loop e executando "p._getClassForPage('Açúcar')" no console). Por outro lado, se removo os parêntesis que capturariam o nome da predefinição, o loop detecta todas (mas aí ainda é preciso inserir mais algum código para extrair o nome da predefinição efetivamente). Helder.wiki (discussão) 21h42min de 13 de junho de 2014 (UTC)

Já entendi: Uma vez que é encontrada a predefinição "em tradução", o loop termina porque páginas em tradução não podem ser de nível 4. Consequentemente as predefinições seguintes não são analisadas. Helder.wiki (discussão) 19h38min de 19 de junho de 2014 (UTC)

Fiz mais algumas mudanças e agora já obtenho table#1 { 3, "encontrado predefinição:em tradução", } quando executo mw.logObject(p._getClassForPage('Açúcar')) no console. Testei também em outros artigos. Nestes a avaliação e o motivo foram os mesmos que o script em python fornece: matemática, álgebra, Processo s, Tachysphex lindbergi, Rone, Batgirl. Já nestes outros, a avaliação foi a mesma mas o motivo foi diferente: geografia (3, 'encontrado predefinição:em tradução' vs 'não foram encontradas referências na seção "Geógrafo e Professor de Geografia"'), Língua inglesa (3, 'encontrado predefinição:em tradução' vs 'não foram encontradas referências na seção "Vocabulário"') ).Helder.wiki (discussão) 01h53min de 20 de junho de 2014 (UTC)

Comparação

Seria bom comparar os resultados dos scripts em Lua e em Python, para N artigos (uns 500?), e gerar uma tabela com eventuais diferenças nas avaliações (diferenças nos critérios não me parecem muito relevantes, ou são?). Helder.wiki (discussão) 01h53min de 20 de junho de 2014 (UTC)

Consegui gerar uma tabela para comparar os resultados dos dois scripts em uma lista de artigos escolhidos ao acaso. Na amostra, a qualidade estimada para os seguintes artigos deixou de ser "2 (menos de 12000 bytes)":
  • Kelly Holmes passou para "3 (menos de 20000 bytes)"
    Esta página tem 11818 caracteres, que ocupam 12022 bytes (letras acentuadas ocupam mais espaço, por exemplo). Ao contrário do que estava documentado em Wikipédia:Avaliação automática, o script em python conta o número de caracteres (pois usa len). Podemos obter o mesmo resultado em lua trocando #text por mw.ustring.len( text ), mas nesse caso é preciso atualizar a documentação.
  • Gliese 581 d passou para "1 (menos de 5 parágrafos)"
    Neste artigo, o módulo em Lua estáestava levando em conta apenas os parágrafos "O movimento de...", "Em média, a luz...", "Gliese 581 d é provavelmente..." e "Investigadores do Centro...". Já o script em python também conta os parágrafos "Uma equipe de astrônomos..." e "Pensava-se originalmente...".
    Aparentemente, o comando mw.ustring.gsub(text, '<[Rr][Ee][Ff].-</[Rr][Ee][Ff]>', '') remove desde o "<ref name=udry />" da infobox até o "</ref>" que fecha o <ref name="udry"> da seção "Descoberta", fazendo com que o primeiro parágrafo "Uma equipe de astrônomos..." desapareça. O problema foi resolvido com esta edição.
  • Marco Cláudio Marcelo (cônsul em 222 a.C.) passou para "1 (menos de 5 parágrafos)" O problema foi resolvido com esta edição.
  • Gisela da Áustria passou para "1 (menos de 5 parágrafos)"O problema foi resolvido com esta outra edição.
Helder.wiki (discussão) 15h25min de 20 de junho de 2014 (UTC)
Testei com mais um lote de artigos. Estes artigos tinham avaliação "1 (menos de 5 parágrafos)":
  • Imhotep passou para "2 (menos de 12000 bytes)"
    Aqui o módulo se sai melhor do que o marcas.py, que só detectava os parágrafos "A localização...", "É importante..." e "Vídeo '''O Olho de Hórus'''...", pois detecta outros 4 parágrafos: "'''Imhotep''' (por vezes", ": ''Chanceler do Rei do Egito", "Imhotep arquitetou" e "'''Imhotep''' é o antagonista"
  • Rio da Vila passou para "2 (menos de 12000 bytes)"
    Novamente o módulo em Lua está mais preciso na detecção dos parágrafos, por detectar "O '''rio da Vila''' é um ribeiro...", que era ignorado pelo marcas.py
Por outro lado,
  • McLaren MP4-25 passou de "2 (menos de 12000 bytes)" para "1 (menos de 5 parágrafos)"
    O problema aqui parece ser no marcas.py, que faz a divisão por dois com "len(subp)/2" em vez de "len(subp)/2.0" (e consequentemente, 1/2 resulta em 0 em vez de 0.5).
Helder.wiki (discussão) 18h49min de 20 de junho de 2014 (UTC)

Separar as mensagens da lógica

Acho que seria interessante a separação da interface da lógica, pois fica mais fácil na hora alterar as mensagens e portar o script para uma wiki de outro idioma. !Silent (discussão) 21h29min de 19 de junho de 2014 (UTC)

Regressar à página "Avaliação/Arquivo/1".