Zipf

Compartilhe seus scripts, funções, ferramentas e programas

Moderator: Gio

BeneditoCarneiro
Posts: 13
Joined: 04 Jul 2023, 11:29

Zipf

06 Jul 2023, 11:53

O programa Zipf conta as palavras de um texto não formatado.

Code: Select all

#NoEnv
#SingleInstance, Force
SendMode, Input
SetBatchLines, -1
SetWorkingDir, %A_ScriptDir%

bc := Chr(0169) . " 2023 Benedito Carneiro"
Gui, Font, s13 cYellow, Segoe UI
Gui, Color,003366
Gui, Add, Text,, Conta ocorrências de palavras em textos escritos
Gui, Font, cWhite
Gui, Add, Text,, Selecione o arquivo com o texto e espere a`nmensagem de fim de execução:
Gui, Add, Button, h30 w100 gArquivo, Arquivo
Gui, Add, Text
Gui, Add, Button, h30 w100 gSair, Sair
Gui, Font, cYellow
Gui, Add, Text,, %bc%
Gui, Show,,
Return

Arquivo:
FileSelectFile, acUsuario,,, Selecione o arquivo
if ErrorLevel
    Return
arqUsuario := ExtractFileName(acUsuario)
cUsuario := ExtractFilePath(acUsuario)
FileRead, txtLido, *P65001 %acUsuario%
txtLido := LimpatxtLido(txtLido)
pathDb := A_ScriptDir "\zipf_7.accdb"
conn := ComObjCreate("ADODB.Connection")
conn.Open("Driver={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ=" . pathDb . ";")
rs := conn.Execute("DELETE FROM Palavras;")
Loop, parse, txtLido, " "
    rs := conn.Execute("INSERT INTO Palavras (palavra) VALUES('" . A_LoopField . "');")
arqOcorrencias := cUsuario . NomeArqOcorrencias()
FileAppend, %arqUsuario%`n , %arqOcorrencias%, UTF-8
linha := "Palavra, ocorrências`n"
FileAppend, %linha% , %arqOcorrencias%, UTF-8
rs := conn.Execute("SELECT * FROM SomaOcorrencias;")
totalPalavras := 0
while (!rs.EOF) {
    linha := rs.Fields.Item("W").Value . ", " . Round(rs.Fields.Item("S").Value) . "`n"
    FileAppend, %linha%, %arqOcorrencias%, UTF-8
    totalPalavras += Round(rs.Fields.Item("S").Value)
    rs.MoveNext()
}
FileAppend, Total de palavras: %totalPalavras%, %arqOcorrencias%, UTF-8
rs.Close(), rs := "", conn.Close(), conn := ""
MsgBox, 64, Fim da execução, O programa Zipf terminou de executar.`nGravei os resultados em %arqOcorrencias%.
#IfWinActive ahk_class Notepad
    WinClose ahk_class Notepad
run, Notepad %arqOcorrencias%
Return

LimpatxtLido(txtLido) {
    ;Remove do texto as tags HTML -entre "<" e ">"-.
    txtLido := RegExReplace(txtLido, "<[^>]*>")
    ;Junta todos os parágrafos na mesma linha, substituindo as quebras de linha por um espaço em branco.
    txtLido := RegExReplace(txtLido, "\n", " ")
    ;Exclui os caracteres diferentes de letras, espaços em branco ou hífen nas palavras hifenizadas.
    txtLido := RegExReplace(txtLido, "[^\p{L} -]")
    ;Reduz a um único espaço os espaços entre palavras.
    txtLido := RegExReplace(txtLido, "\s+", " ")
    return txtLido
}

ExtractFileName(acUsuario) {
    return RegExReplace(acUsuario, "^.+\\(.+)$", "$1")
}

ExtractFilePath(path) {
    path := RegExReplace(path, "\\[^\\]+$") . "\"
    return path
}

NomeArqOcorrencias() {
    FormatTime, data_atual, %A_Now%, ddMMyyy
    FormatTime, hora_atual, %A_Now%, HHmmss
    return "zipf_" . data_atual . "_" . hora_atual ".csv"
}

GuiEscape:
GuiClose:
Sair:
Gui,destroy
ExitApp

Return to “Scripts e Funções”

Who is online

Users browsing this forum: No registered users and 41 guests