Fazer estatística dos bigramas [fechados]

1

Eu tenho um arquivo de texto, que tem uma palavra em cada linha e eu gostaria de fazer bigramas e contar repetições (estatísticas) de cada bigrama.

Minha abordagem:

cat TEXTEN1.txt | tr '*\n' '*? *\n'

Eu gostaria de fazer duas colunas, mas esta solução falha.

    
por Muffy 10.03.2017 / 17:26

3 respostas

0

paste -d' ' - - < TEXTEN1.txt

Para obter uma contagem dos bigramas produzidos:

paste -d' ' - - < TEXTEN1.txt | sort | uniq -c

No entanto, este método vai excluir metade dos bigramas. Por exemplo, se o seu arquivo de entrada for:

alpha
beta
gamma
alpha
beta
gamma

Os bigramas incluirão as linhas 1-2, linhas 3-4 e linhas 5-6, mas não as linhas 2-3 e as linhas 3-4.

Uma maneira de resolver isso seria criar uma cópia do arquivo de entrada e adicionar uma não palavra à parte superior (por exemplo, "#") e depois filtrar o resultado que contém a não palavra:

cat <(paste -d' ' - - < TEXTEN1.txt; paste -d' ' - - < TEXTEN2.txt) | sort | uniq -c | grep -v #

    
por 10.03.2017 / 18:15
0

Em gnu sistemas você pode executar:

paste <(head -n -1 infile) <(tail -n +2 infile) | sort | uniq -c

Portável:

sed -e '1!{$!p' -e '}' infile | paste -d' ' - -  | sort | uniq -c

ou

awk 'NR>1{i=t" "$0; z[i]++};{t=$0}END{for (i in z){print z[i], i}}' infile
    
por 10.03.2017 / 18:57
0

Se você é o que é combinar palavras em cada duas linhas consecutivas para criar um bigrama, você pode fazer assim:

cat TEXTEN1.txt|sed 'N; s/\n/ /'|sort|uniq -c

isto combinará os pares consecutivos de linhas como 1-2, 3-4, 5-6 e.t.c

Se o que você quer é combinar cada linha de +1 (ou seja, 1-2, 2-3, 3-4 ...), você pode fazer isso assim

cat TEXTEN1.txt|sed -n ':a N;s/\n/ /p;s/\w* //;ta'|sort|uniq -c

ou use (um pouco mais elegante) sed + paste combinação por @don_crissti

    
por 10.03.2017 / 18:34