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