Discussione:
analisi di frequenza di parole - tag
(troppo vecchio per rispondere)
Bluepill
2008-05-06 22:02:55 UTC
Permalink
salve a tutti
ho un problema da affrontare e volevo magari qualche spunto da parte
vostra a livello piu che altro concettuale (per ora).
ho dei testi e vorrei estrarre da ognuno di questi testi, una lista
delle singole parole di cui è composto aggregate per parola e con un
numero affianco per l'occorrenza associata.
Non mi viene in mente da dove partire onestamente.
immagino di copiare e incollare il testo in un foglio excel. si spezzera
probilmente su piu celle.
ORa, vorrei analizzare il testo con una funzione, o forse un vba?
immagino che prima di tutto si trattera di estrarre tutte le parole e
poi di ordinarle e poi contarle con la sua funzione...

qualche suggerimento?
l'output dovrebbe essere una colonna con le singole parole espresse una
volta sola e un'altra colonna con il numero della loro frequenza

grazie per eventuali risposte
r
2008-05-06 22:28:03 UTC
Permalink
Post by Bluepill
salve a tutti
ho un problema da affrontare e volevo magari qualche spunto da parte
vostra a livello piu che altro concettuale (per ora).
ho dei testi e vorrei estrarre da ognuno di questi testi, una lista
delle singole parole di cui è composto aggregate per parola e con un
numero affianco per l'occorrenza associata.
Non mi viene in mente da dove partire onestamente.
immagino di copiare e incollare il testo in un foglio excel. si spezzera
probilmente su piu celle.
ORa, vorrei analizzare il testo con una funzione, o forse un vba?
immagino che prima di tutto si trattera di estrarre tutte le parole e
poi di ordinarle e poi contarle con la sua funzione...
qualche suggerimento?
l'output dovrebbe essere una colonna con le singole parole espresse una
volta sola e un'altra colonna con il numero della loro frequenza
grazie per eventuali risposte
dove li hai i testi ... in word?
quanto sono lunghi?
intanto dai una occhiata qui
http://www.microsoft.com/office/community/it-it/default.mspx?&query=r&lang=it&cr=IT&guid=&sloc=it-it&dg=microsoft.public.it.office.excel&p=1&tid=61a7d875-96df-4a6a-b215-9a226e5523f8&mid=332c4c82-62b6-45cd-aee5-a22ca6df8a7d

e alla funzione split
ciao
r
Bluepill
2008-05-07 05:58:23 UTC
Permalink
Post by r
Post by Bluepill
salve a tutti
ho un problema da affrontare e volevo magari qualche spunto da parte
vostra a livello piu che altro concettuale (per ora).
ho dei testi e vorrei estrarre da ognuno di questi testi, una lista
delle singole parole di cui è composto aggregate per parola e con un
numero affianco per l'occorrenza associata.
Non mi viene in mente da dove partire onestamente.
immagino di copiare e incollare il testo in un foglio excel. si spezzera
probilmente su piu celle.
ORa, vorrei analizzare il testo con una funzione, o forse un vba?
immagino che prima di tutto si trattera di estrarre tutte le parole e
poi di ordinarle e poi contarle con la sua funzione...
qualche suggerimento?
l'output dovrebbe essere una colonna con le singole parole espresse una
volta sola e un'altra colonna con il numero della loro frequenza
grazie per eventuali risposte
dove li hai i testi ... in word?
li ho in text ma ovviamente posso metterli dentro word... non conosco
bene word, dici che forse posso ottenere dei risultati simili anche con
word?
Post by r
quanto sono lunghi?
http://www.microsoft.com/office/community/it-it/default.mspx?&query=r&lang=it&cr=IT&guid=&sloc=it-it&dg=microsoft.public.it.office.excel&p=1&tid=61a7d875-96df-4a6a-b215-9a226e5523f8&mid=332c4c82-62b6-45cd-aee5-a22ca6df8a7d
e alla funzione split
quindi in pratica con la funzione split riesco a ottenere un testo
separato in una cella per parola e poi con il codice che suggerisci a
quel link posso verificare la ricorrenza

bene, ne ho abbastanza per provare, grazie!

se avete altre info apprezzo grazie!
Post by r
ciao
r
ciao francesco
fernando cinquegrani
2008-05-07 06:32:24 UTC
Permalink
Post by Bluepill
se avete altre info apprezzo grazie!
http://www.google.it/search?hl=it&q=spad+t&meta=
.f
Norman Jones
2008-05-07 09:18:00 UTC
Permalink
Ciao Bluepill,

=============
ho un problema da affrontare e volevo magari qualche spunto da parte
vostra a livello piu che altro concettuale (per ora).
ho dei testi e vorrei estrarre da ognuno di questi testi, una lista
delle singole parole di cui è composto aggregate per parola e con un
numero affianco per l'occorrenza associata.
Non mi viene in mente da dove partire onestamente.
immagino di copiare e incollare il testo in un foglio excel. si spezzera
probilmente su piu celle.
ORa, vorrei analizzare il testo con una funzione, o forse un vba?
immagino che prima di tutto si trattera di estrarre tutte le parole e
poi di ordinarle e poi contarle con la sua funzione...

qualche suggerimento?
l'output dovrebbe essere una colonna con le singole parole espresse una
volta sola e un'altra colonna con il numero della loro frequenza
=============

In un modulo standard (vedi di sotto),
prova:

'==========>>
Option Explicit

Public Sub FindUniques(Optional WB As Workbook, _
Optional SH As Worksheet, _
Optional Rng As Range)

'///////////////////////////////////////////
'Restituisce il numero di volte que si trova
'ogni valore unico negli intervalli di interesse
'///////////////////////////////////////////

Dim rCell As Range
Dim aCell As Range
Dim Col As Collection
Dim myArr() As Variant
Dim i As Long
Dim j As Long
Dim msg As String

If WB Is Nothing Then
Set WB = ActiveWorkbook
End If

If SH Is Nothing Then
Set SH = WB.ActiveSheet
End If

If Rng Is Nothing Then
If SH.Name = ActiveSheet.Name Then
If TypeOf Application.Selection Is Excel.Range Then
Set Rng = Application.Selection
Else
Set Rng = SH.UsedRange
End If
Else
Set Rng = SH.UsedRange
End If
End If

If Not Intersect(Rng, SH.UsedRange) Is Nothing Then
Set Rng = Intersect(Rng, SH.UsedRange)
Else
Set Rng = SH.UsedRange
End If

Set Col = New Collection

If Rng.Count = 1 Then
Set Rng = SH.UsedRange
MsgBox Prompt:="Non hai fatto una selezione valida" _
& vbNewLine _
& "Questa routine richiede una " & _
"selezezione di piu' celle", _
Buttons:=vbInformation, _
Title:="Selection Error!"
Exit Sub
End If

'\\ Add cells to the collection.
'\\ Duplicates create an error and are not added
For Each rCell In Rng.Cells
With rCell
If Not IsEmpty(.Value) Then
On Error Resume Next
Col.Add .Value, CStr(.Value)
On Error GoTo 0
End If
End With
Next rCell

On Error Resume Next
'\\ Redim the array to fit the collection
ReDim myArr(1 To Col.Count, 1 To 2)

'\\ Fill the array with the collection items
'\\ and their occurrences
For i = LBound(myArr, 1) To UBound(myArr, 1)
j = 0
myArr(i, 1) = Col.Item(i)
For Each rCell In Rng.Cells
With rCell
If .Value = myArr(i, 1) Then
j = j + 1
End If
End With
Next rCell
myArr(i, 2) = j
Next i

' '\\ Print the array to make sure it worked
' For i = LBound(myArr, 1) To UBound(myArr, 1)
' 'Debug.Print myArr(i, 1), myArr(i, 2)
' msg = msg & myArr(i, 1) _
' & vbTab & myArr(i, 2) _
' & vbNewLine
' Next i

On Error GoTo 0
If Len(msg) = 0 Then
msg = "Nessun valore trovato!"
End If

MsgBox Prompt:=msg, _
Buttons:=vbInformation, _
Title:="Unique Values Report"

XIT:
'\\ Clean up
Set rCell = Nothing
Set Rng = Nothing
Set Col = Nothing
End Sub
'<<==========

Si chiamerebbe la suddetta routine
con una macro del genere:

'==========>>
Public Sub Tester()
Dim WB As Workbook
Dim SH As Worksheet
Dim Rng As Range

Set WB = Workbooks("Pippo.xls") '<<=== da CAMBIARE
Set SH = WB.Sheets("Foglio1") '<<=== da CAMBIARE
Set Rng = SH.Range("C8:C16,G10:G11") '<<=== da CAMBIARE

Call FindUniques(WB, SH, Rng)

End Sub
'<<==========

Per utilizzare questa routine:

Alt-F11 per aprire l'Editor di VBA
Menu | Inserisci | Modulo
Incolla il suddetto codice
Alt-F11 per tornare in Excel
Alt-F8
Seleziona "Tester"
Esegui


---
Regards.
Norman
Bruno Campanini
2008-05-07 10:47:49 UTC
Permalink
Post by Bluepill
salve a tutti
ho un problema da affrontare e volevo magari qualche spunto da parte
vostra a livello piu che altro concettuale (per ora).
ho dei testi e vorrei estrarre da ognuno di questi testi, una lista delle
singole parole di cui è composto aggregate per parola e con un numero
affianco per l'occorrenza associata.
Non mi viene in mente da dove partire onestamente.
immagino di copiare e incollare il testo in un foglio excel. si spezzera
probilmente su piu celle.
ORa, vorrei analizzare il testo con una funzione, o forse un vba?
immagino che prima di tutto si trattera di estrarre tutte le parole e poi
di ordinarle e poi contarle con la sua funzione...
qualche suggerimento?
l'output dovrebbe essere una colonna con le singole parole espresse una
volta sola e un'altra colonna con il numero della loro frequenza
grazie per eventuali risposte
Io credo che un foglio elettronico sia proprio l'ultima cosa da usare
per lo scopo che ti proponi, salvo che per "testi" tu non intenda
qualcosa di molto breve (qualche pagina al massimo) che possa stare
in una singola cella di Excel.

Direi che la procedura più appropriata sia Word che con una semplice
macro è in grado di darti tutte le statistiche richieste ricavate da testi
comunque lunghi.
E il NG più appropriato dovrebbe essere microsoft.public.it.office.word.

Ciao
Bruno
Bluepill
2008-05-07 10:55:11 UTC
Permalink
Post by Bruno Campanini
Io credo che un foglio elettronico sia proprio l'ultima cosa da usare
per lo scopo che ti proponi, salvo che per "testi" tu non intenda
qualcosa di molto breve (qualche pagina al massimo) che possa stare
in una singola cella di Excel.
si tratta di testi brevi, al massimo due o tre pagine
e poi vorrei fare delle analisi numeriche sulle parole quindi mi viene
meglio excel
Post by Bruno Campanini
Direi che la procedura più appropriata sia Word che con una semplice
macro è in grado di darti tutte le statistiche richieste ricavate da testi
comunque lunghi.
E il NG più appropriato dovrebbe essere microsoft.public.it.office.word.
ecco diciamo che se word è sicuramente piu appropriato, ho un
pregiudizio positivo verso excel: con excel, si puo' fare tutto! :)))
Post by Bruno Campanini
Ciao
Bruno
ciao!
Norman Jones
2008-05-07 11:12:57 UTC
Permalink
Ciao Bruno,

=============
Io credo che un foglio elettronico sia proprio l'ultima cosa da usare
per lo scopo che ti proponi, salvo che per "testi" tu non intenda
qualcosa di molto breve (qualche pagina al massimo) che possa stare
in una singola cella di Excel.

Direi che la procedura più appropriata sia Word che con una semplice
macro è in grado di darti tutte le statistiche richieste ricavate da testi
comunque lunghi.
E il NG più appropriato dovrebbe essere microsoft.public.it.office.word.
=============

Credo che un semplice Testo in
Colonne (sia a mano che da VBA)
seguito dalla mia routine, diano a
Bluepill i risultati che cerca.

Inoltre, la mia routine potrebbe
riutillizata per altre cose - n for
the price of 1!

A proposito, dici "Word" - cosa
sarebbe quello? :-)



---
Regards.
Norman
Bluepill
2008-05-07 11:24:32 UTC
Permalink
Post by Norman Jones
Ciao Bruno,
=============
Io credo che un foglio elettronico sia proprio l'ultima cosa da usare
per lo scopo che ti proponi, salvo che per "testi" tu non intenda
qualcosa di molto breve (qualche pagina al massimo) che possa stare
in una singola cella di Excel.
Direi che la procedura più appropriata sia Word che con una semplice
macro è in grado di darti tutte le statistiche richieste ricavate da testi
comunque lunghi.
E il NG più appropriato dovrebbe essere microsoft.public.it.office.word.
=============
Credo che un semplice Testo in
Colonne (sia a mano che da VBA)
seguito dalla mia routine, diano a
Bluepill i risultati che cerca.
si infatti grazie norman ci sto lavorando ora!! grande!
Post by Norman Jones
Inoltre, la mia routine potrebbe
riutillizata per altre cose - n for
the price of 1!
esatto!!
eliano
2008-05-07 13:24:00 UTC
Permalink
Post by Bluepill
Post by Norman Jones
Ciao Bruno,
=============
Io credo che un foglio elettronico sia proprio l'ultima cosa da usare
per lo scopo che ti proponi, salvo che per "testi" tu non intenda
qualcosa di molto breve (qualche pagina al massimo) che possa stare
in una singola cella di Excel.
Direi che la procedura più appropriata sia Word che con una semplice
macro è in grado di darti tutte le statistiche richieste ricavate da testi
comunque lunghi.
E il NG più appropriato dovrebbe essere microsoft.public.it.office.word.
=============
Credo che un semplice Testo in
Colonne (sia a mano che da VBA)
seguito dalla mia routine, diano a
Bluepill i risultati che cerca.
si infatti grazie norman ci sto lavorando ora!! grande!
Post by Norman Jones
Inoltre, la mia routine potrebbe
riutillizata per altre cose - n for
the price of 1!
esatto!!
Ciao Bluepill e saluti a tutti.
Della serie: l'importante è pattecipare, segnalo solo una possibilità
consigliata qualche tempo fa' da fernando:

In A1 = Nel mezzo del cammin di nostra vita
in B1- B7 = =STRINGA.ESTRAI(A1;RICERCA("|";SOSTITUISCI(" " & A1;"
";"|";RIF.RIGA()));RICERCA("|";SOSTITUISCI(" " & A1 & " ";"
";"|";RIF.RIGA()+1))-RICERCA("|";SOSTITUISCI(" " & A1;" ";"|";RIF.RIGA()))-1)

Potrebbe essere usata come base di partenza ed implementata in funzione dei
dati disponibili.
Saluti
Eliano
Maurizio Borrelli
2008-05-07 11:57:39 UTC
Permalink
"Norman Jones"
Post by Norman Jones
=============
Io credo che un foglio elettronico sia proprio l'ultima cosa da usare
per lo scopo che ti proponi, salvo che per "testi" tu non intenda
qualcosa di molto breve (qualche pagina al massimo) che possa stare
in una singola cella di Excel.
Direi che la procedura più appropriata sia Word che con una semplice
macro è in grado di darti tutte le statistiche richieste ricavate da testi
comunque lunghi.
E il NG più appropriato dovrebbe essere microsoft.public.it.office.word.
=============
Credo che un semplice Testo in
Colonne (sia a mano che da VBA)
seguito dalla mia routine, diano a
Bluepill i risultati che cerca.
Inoltre, la mia routine potrebbe
riutillizata per altre cose - n for
the price of 1!
A proposito, dici "Word" - cosa
sarebbe quello? :-)
Ciao Norman. Ciao [CENSURA].

Pur storcendo il naso mi vedo costretto a essere d'accordo con
l'innominabile. Perche' non partire da qualcosa del genere? Chiaramente
qualcosa di un po' piu' sofisticato di questo, ma la sostanza non
cambia.

' Modulo1 - Modulo standard
'
Option Explicit

Public Sub Test()
Dim objWdApp As Word.Application
Dim objWdDoc As Word.Document
Dim rng As Excel.Range
Dim i As Long

Set objWdApp = GetObject(, "Word.Application")
Set objWdDoc = objWdApp.ActiveDocument
Set rng = Foglio1.Cells(1, 1)
rng.Value = "Parole"
With objWdDoc.Words
For i = 1 To .Count
rng.Offset(i).Value = .Item(i).Text
Next
End With

Set objWdDoc = Nothing
Set objWdApp = Nothing
End Sub

--
Maurizio Borrelli [Microsoft MVP Office System]
http://www.riolab.org/
Norman Jones
2008-05-07 12:31:48 UTC
Permalink
Ciao Maurizio,

============
Ciao Norman. Ciao [CENSURA].

Pur storcendo il naso mi vedo costretto a essere d'accordo con
l'innominabile. Perche' non partire da qualcosa del genere? Chiaramente
qualcosa di un po' piu' sofisticato di questo, ma la sostanza non
cambia.

' Modulo1 - Modulo standard
'
Option Explicit

Public Sub Test()
Dim objWdApp As Word.Application
Dim objWdDoc As Word.Document
Dim rng As Excel.Range
Dim i As Long

Set objWdApp = GetObject(, "Word.Application")
Set objWdDoc = objWdApp.ActiveDocument
Set rng = Foglio1.Cells(1, 1)
rng.Value = "Parole"
With objWdDoc.Words
For i = 1 To .Count
rng.Offset(i).Value = .Item(i).Text
Next
End With

Set objWdDoc = Nothing
Set objWdApp = Nothing
End Sub
============

Se questo fosse un NG di Word,
avrei potuto rispondere in modo
diverso, ma poi, Bluepill e nostro
amico e - devo ammetterlo - mi
divertivo un po'; un altro modo di
pelare il gatto, se vuoi!


---
Regards.
Norman
casanmaner
2008-05-07 12:59:50 UTC
Permalink
Post by Maurizio Borrelli
Ciao Norman. Ciao [CENSURA].
Pur storcendo il naso mi vedo costretto a essere d'accordo con
l'innominabile.
Scusate ma qual è il nome dell'innominabile? ... Ah già se è innominabile
non potrete che continuare a chiamarlo che innominabile .... ma allora siamo
di fronte ad un riferimento circolare? Ma quante iterazioni ci vorranno e
che grado di precisione dovrò impostare per trovare la soluzione a questa
domanda? :-)
Sarà questa una deformazione da eccessivo utilizzo di excel? :-)
Ok ok ho cazzeggiato .... ora ritorno nei ranghi :-)

ciao
Bruno Campanini
2008-05-07 13:36:55 UTC
Permalink
Post by casanmaner
Post by Maurizio Borrelli
Ciao Norman. Ciao [CENSURA].
Pur storcendo il naso mi vedo costretto a essere d'accordo con
l'innominabile.
Scusate ma qual è il nome dell'innominabile? ... Ah già se è innominabile
non potrete che continuare a chiamarlo che innominabile .... ma allora
siamo di fronte ad un riferimento circolare? Ma quante iterazioni ci
vorranno e che grado di precisione dovrò impostare per trovare la
soluzione a questa domanda? :-)
Sarà questa una deformazione da eccessivo utilizzo di excel? :-)
Ok ok ho cazzeggiato .... ora ritorno nei ranghi :-)
ciao
L'innominabile sarei io, poiché ho pregato Maurizio
(io posso nominarlo perché lui non mi ha pregato di fare
altrettanto) di "nemmeno mominarmi".
Così non ho la tentazione di rispondergli.

Bruno
Bruno Campanini
2008-05-07 13:07:13 UTC
Permalink
Post by Norman Jones
Ciao Bruno,
=============
Io credo che un foglio elettronico sia proprio l'ultima cosa da usare
per lo scopo che ti proponi, salvo che per "testi" tu non intenda
qualcosa di molto breve (qualche pagina al massimo) che possa stare
in una singola cella di Excel.
Direi che la procedura più appropriata sia Word che con una semplice
macro è in grado di darti tutte le statistiche richieste ricavate da testi
comunque lunghi.
E il NG più appropriato dovrebbe essere microsoft.public.it.office.word.
=============
Credo che un semplice Testo in
Colonne (sia a mano che da VBA)
seguito dalla mia routine, diano a
Bluepill i risultati che cerca.
Mmmm....
Prova ad analizzare questo:

Ho trovato un amico, quell'amico che credevo d'aver perso,
l'unico amico invece che s'è reso disponibile ed è tutt'ora
diventato il boy-friend di ... (non me la sento di nominar di chi).
Pur. 1-3:
'Per correr migliori acque alza le vele\omai la navicella del
mio ingegno\che lascia dietro a sé mar sì crudele'

Ma è solo un assaggio...

Bruno
Norman Jones
2008-05-07 13:20:12 UTC
Permalink
Ciao Bruno,

=============
Mmmm....
Prova ad analizzare questo:

Ho trovato un amico, quell'amico che credevo d'aver perso,
l'unico amico invece che s'è reso disponibile ed è tutt'ora
diventato il boy-friend di ... (non me la sento di nominar di chi).
Pur. 1-3:
'Per correr migliori acque alza le vele\omai la navicella del
mio ingegno\che lascia dietro a sé mar sì crudele'

Ma è solo un assaggio...
=============

Non vedo una montagna invalicabile!

Ho come amici le Regular Expression!



---
Regards.
Norman
Bruno Campanini
2008-05-07 15:49:05 UTC
Permalink
Post by Norman Jones
Non vedo una montagna invalicabile!
Ho come amici le Regular Expression!
Certo che no, non ho asserito questo.
Ma bisogna valicarla, la montagna...
=======================================
Sub Sheet6_Button1_Click()
Dim SourceRange As Range, i As Long, j As Long, k As Long, S
Dim TargetRange As Range, SColl As New Collection
Dim FindRange As Range, CellFound As Range, FirstAddress As String
Dim S12 As String, S1 As String, S2 As String, Spazio As Boolean
Dim AsciiArr(1 To 255) As String, S11 As String

' -------- Definizione --------
Set SourceRange = [Sheet6!C8]
' -----------------------------

For i = 33 To 126
AsciiArr(i) = i
Next
AsciiArr(32) = Space(1)
AsciiArr(128) = 128 ' €
AsciiArr(192) = 192 ' À
AsciiArr(200) = 200 ' È
AsciiArr(201) = 201 ' É
AsciiArr(204) = 204 ' Ì
AsciiArr(210) = 210 ' Ò
AsciiArr(217) = 217 ' Ù
AsciiArr(224) = 224 ' à
AsciiArr(232) = 232 ' è
AsciiArr(233) = 233 ' é
AsciiArr(236) = 236 ' ì
AsciiArr(242) = 242 ' ò
AsciiArr(249) = 249 ' ù

S1 = SourceRange
S1 = Trim(S1)
S1 = Replace(S1, "'", Space(1))
Do: Spazio = False
For i = 1 To Len(S1) - 1
If Mid(S1, i, 1) = Space(1) And Mid(S1, i + 1, 1) = Space(1) Then
Spazio = True
S1 = Mid(S1, 1, i - 1) & Mid(S1, i + 1)
End If
Next
Loop Until Not Spazio

For i = 1 To Len(S1)
S11 = Mid(S1, i, 1)
S12 = Asc(S11)
If S12 >= 65 And S12 <= 90 Or S12 >= 97 And S12 <= 122 _
Or S12 >= 48 And S12 <= 57 Or AsciiArr(S12) = S11 Then
S2 = S2 & S11
End If
Next

Set TargetRange = [Sheet6!B11]
S = Split(S2, " ")

For i = 1 To UBound(S) + 1
On Error GoTo Dup
SColl.Add S(i - 1), CStr(S(i - 1))
k = k + 1
TargetRange(k, 1) = S(i - 1)
TargetRange(k, 2) = 1
Continua:
Next

Exit Sub

Dup:
On Error GoTo 0
Set FindRange = Range(TargetRange(1), TargetRange(k))
With FindRange
Set CellFound = .Find(What:=S(i - 1), _
After:=FindRange(.Count), _
MatchCase:=False, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
LookAt:=xlWhole, _
LookIn:=xlValues)
If Not CellFound Is Nothing Then
FirstAddress = CellFound.Address
Do: j = j + 1
Set CellFound = .FindNext(CellFound)
Loop While CellFound.Address <> FirstAddress
End If
End With
CellFound(, 2) = CellFound(, 2) + j
j = 0: Resume Continua

End Sub
================================
Secondo il proprio taste si possono includere/escludere
caratteri a piacimento aggiungendo/togliendo valori
da AsciiArr().

Il testo è in una sola cella (ci stanno fino a 8192 byte, più
di un canto della Divina Commedia);
estensione a più celle su ordinazione...

Elabora la tua Regular Expression che poi facciamo la gara di
velocità (previa aggiunta nella mia di ScreenUpdating and so on).

Bruno
Bruno Campanini
2008-05-07 16:01:36 UTC
Permalink
Post by Bruno Campanini
Certo che no, non ho asserito questo.
Ma bisogna valicarla, la montagna...
=======================================
Sub Sheet6_Button1_Click()
Dim SourceRange As Range, i As Long, j As Long, k As Long, S
Dim TargetRange As Range, SColl As New Collection
Dim FindRange As Range, CellFound As Range, FirstAddress As String
Dim S12 As String, S1 As String, S2 As String, Spazio As Boolean
Dim AsciiArr(1 To 255) As String, S11 As String
' -------- Definizione --------
Set SourceRange = [Sheet6!C8]
' -----------------------------
Fra le Definizioni vi è anche:

Set TargetRange = [Sheet6!B11]
che mi è rimasto a metà pagina.

Bruno
r
2008-05-07 16:28:09 UTC
Permalink
Post by Bruno Campanini
Mmmm....
Ho trovato un amico, quell'amico che credevo d'aver perso,
l'unico amico invece che s'è reso disponibile ed è tutt'ora
diventato il boy-friend di ... (non me la sento di nominar di chi).
'Per correr migliori acque alza le vele\omai la navicella del
mio ingegno\che lascia dietro a sé mar sì crudele'
Ma è solo un assaggio...
Bruno
la procedura che ho postato
mi da questo risultato (analizzando
prima ogni singolo carattere e le
occorrenze e successivamente le parole)
credi che possa andare?
il problema sono i s' o i qull'
ma credo che siano
difficilmente gestibili in altro modo.
ciao
r

Ascii Carattere Frequenza
32 61
39 7
40 ( 1
41 ) 1
44 , 2
45 - 2
46 . 8
49 1 1
51 3 1
58 : 1
66 B 1
72 H 1
77 M 1
80 P 2
92 \ 2
97 a 23
98 b 2
99 c 15
100 d 12
101 e 29
102 f 1
103 g 5
104 h 4
105 i 26
108 l 17
109 m 9
110 n 16
111 o 27
112 p 2
113 q 2
114 r 18
115 s 11
116 t 9
117 u 9
118 v 7
121 y 1
122 z 1
232 è 3
233 é 1
236 ì 1

Parola Frequenza
23
Bruno 1
Ho 1
Ma 1
Per 1
Pur 1
a 1
acque 1
alza 1
amico 3
assaggio 1
aver 1
boy 1
che 3
chi 1
correr 1
credevo 1
crudele 1
d 1
del 1
di 3
dietro 1
disponibile 1
diventato 1
ed 1
friend 1
il 1
ingegno 1
invece 1
l 1
la 2
lascia 1
le 1
mar 1
me 1
migliori 1
mio 1
navicella 1
nominar 1
non 1
omai 1
ora 1
perso 1
quell 1
reso 1
s 1
sento 1
solo 1
sé 1
sì 1
trovato 1
tutt 1
un 2
unico 1
vele 1
è 3
r
2008-05-07 16:32:00 UTC
Permalink
allo stesso modo ho analizzato
il testo integrale della divina
commedia semplicemente facendo
selezionatutto -> copia
da questa pagina
http://www.filosofico.net/ladivinacommedia.htm

ancora ciao
r
r
2008-05-07 13:30:01 UTC
Permalink
Post by Bluepill
salve a tutti
ho un problema da affrontare e volevo magari qualche spunto da parte
vostra a livello piu che altro concettuale (per ora).
ho dei testi e vorrei estrarre da ognuno di questi testi, una lista
delle singole parole di cui è composto aggregate per parola e con un
numero affianco per l'occorrenza associata.
Non mi viene in mente da dove partire onestamente.
immagino di copiare e incollare il testo in un foglio excel. si spezzera
probilmente su piu celle.
ORa, vorrei analizzare il testo con una funzione, o forse un vba?
immagino che prima di tutto si trattera di estrarre tutte le parole e
poi di ordinarle e poi contarle con la sua funzione...
qualche suggerimento?
l'output dovrebbe essere una colonna con le singole parole espresse una
volta sola e un'altra colonna con il numero della loro frequenza
grazie per eventuali risposte
così su due piedi ...
da lanciare AnalizzaTestoStart
fai sapere.
ciao
r

p.s.
cos'è quel polverone
http://www.microsoft.com/office/community/it-it/default.mspx?&lang=it&cr=IT&guid=&sloc=it-it&dg=microsoft.public.it.office.excel&p=1&tid=04a461c7-44df-4c5e-91b2-459b6aafe9c8&mid=1f4d5a51-1e2d-48e4-b270-832b7e940736


Sub AnalizzaTestoStart()
Dim Wb As Excel.Workbook
Dim Sh(1) As Excel.Worksheet
Dim rngT As Excel.Range
Dim arrRng() As Variant
Dim testo As String
Dim V1 As Variant

Const NomeSh As String = "Analizzare testo"
Set Wb = ActiveWorkbook
On Error Resume Next
Set Sh(0) = Wb.Worksheets(NomeSh)

Application.ScreenUpdating = False

If Sh(0) Is Nothing Then
Err.Clear
Set rngT = Wb.Worksheets.Add.Range("a1")
rngT.Parent.Name = NomeSh
Set Sh(0) = Wb.Worksheets(NomeSh)
Else
Sh(0).Select
Sh(0).Cells.Clear
Set rngT = Sh(0).Range("a1")
rngT.Select
End If

Application.ScreenUpdating = True

rngT.Copy

Application.CutCopyMode = False

MsgBox "selezionare il testo e copiarlo in Clipboard(Ctrl+C) poi dare l'OK"

Sh(0).Paste

If Err Then
Err.Clear
MsgBox "Clipboard vuota!"
Application.ScreenUpdating = True
Exit Sub
Else
Application.CutCopyMode = False
Set rngT = Sh(0).UsedRange
End If

On Error GoTo 0

arrRng = rngT

Sh(0).Cells.Clear
Set rngT = Sh(0).Range("a1")

rngT.value = "Ascii"
rngT.Offset(0, 1) = "Carattere"
rngT.Offset(0, 2) = "Frequenza"
rngT.Offset(0, 4) = "Parola"
rngT.Offset(0, 5) = "Frequenza"

For Each V1 In arrRng
testo = testo & V1 & " "
Next

Call AnalizzaTesto(testo)
Application.ScreenUpdating = True

End Sub

Function AnalizzaTesto(ByVal testo As String) As Variant
Dim p As Long, V As Long, DP As Long, PV As Long
Dim arrB() As Byte
Dim arrChr(255) As Long, I As Long, a As Long
Dim Temp As Variant

arrB = testo
Debug.Print "Totale caratteri" & UBound(arrB) / 2

For I = 0 To UBound(arrB) Step LenB("A")
Temp = arrB(I)
arrChr(Temp) = arrChr(Temp) + 1
Select Case Temp
Case 65 To 90
Case 97 To 122
Case 192 To 255
Case Else
arrB(I) = 32
End Select
Next
a = 1

For I = 0 To 255
Temp = arrChr(I)
If Temp Then
a = a + 1
ActiveSheet.Cells(a, 1) = I
ActiveSheet.Cells(a, 2) = Chr(I)
ActiveSheet.Cells(a, 3) = Temp
End If
Next
testo = arrB
Call AnalizzaTesto2(testo)
End Function

Function AnalizzaTesto2(testo As String) As Variant
Dim Arr As Variant
Dim V As Variant
Dim C As Long
Dim r As Long
Dim t1 As Long, t2 As Long

Arr = Split(testo, " ")
Arr = CreaVetUnivoco(Arr)
C = 5
t1 = UBound(Arr, 2)
r = 1
For t2 = 0 To t1
r = r + 1
If r = 65536 Then
r = 1
C = C + 2
End If
Cells(r, C) = Arr(0, t2)
Cells(r, C + 1) = Arr(1, t2)

Next

End Function


Function CreaVetUnivoco(Arr2) As Variant
Dim NoDupes As New Collection
Dim Arr()
Dim V
Dim Temp
Dim Index As Long
Dim C As Long
Dim Ncol As Long
Dim Ultimo As Long
Dim Primo As Long
Dim ValArr
Dim Arr3()


Set NoDupes = New Collection
Ultimo = UBound(Arr2)
Primo = LBound(Arr2)
ReDim Arr(Ultimo)

For Each ValArr In Arr2
If Not IsEmpty(ValArr) Then
Arr(C) = ValArr
C = C + 1
End If
Next
ReDim Preserve Arr(C - 1)
Set NoDupes = Nothing
Arr = Shell_m_VetAZ(Arr)
ReDim Arr3(1, C - 1)
C = 0
On Error Resume Next
For Each ValArr In Arr
NoDupes.Add 0, CStr(ValArr)
If Err Then
Err.Clear
Temp = Arr3(1, C - 1)
Arr3(1, C - 1) = Temp + 1
Else
Temp = ValArr
If Not IsEmpty(Temp) Then
Arr3(0, C) = Temp
Arr3(1, C) = 1
C = C + 1
End If
End If
Next
On Error GoTo 0
ReDim Preserve Arr3(1, C - 1)
Set NoDupes = Nothing
CreaVetUnivoco = Arr3
End Function

Function Shell_m_VetAZ(Arr() As Variant) As Variant
Dim value, Index As Long, index2 As Long
Dim Ultimo As Long
Dim Primo As Long
Dim metro As Long
Dim tot As Long

Primo = LBound(Arr)
Ultimo = UBound(Arr)
tot = Ultimo - Primo + 1

Do
metro = metro * 3 + 1
Loop Until metro > tot

Do
metro = metro / 3
For Index = metro + Primo To Ultimo
value = Arr(Index)
index2 = Index
Do While (Arr(index2 - metro) > value) Xor False
Arr(index2) = Arr(index2 - metro)
index2 = index2 - metro
If index2 - metro < Primo Then Exit Do
Loop
Arr(index2) = value
Next
Loop Until metro = 1
Shell_m_VetAZ = Arr
End Function
r
2008-05-07 13:34:02 UTC
Permalink
dimenticavo ... l'ho testata
con la Divina Commedia :-)
Norman Jones
2008-05-07 13:43:40 UTC
Permalink
Ciao R,

=============
dimenticavo ... l'ho testata
con la Divina Commedia :-)
=============

Quale edizione?



---
Regards.
Norman
r
2008-05-07 13:52:00 UTC
Permalink
Post by Norman Jones
Ciao R,
=============
dimenticavo ... l'ho testata
con la Divina Commedia :-)
=============
Quale edizione?
---
Regards.
Norman
questa:
http://www.filosofico.net/ladivinacommedia.htm

:-)
Tiziano Marmiroli
2008-05-07 15:12:13 UTC
Permalink
Post by Bluepill
ho dei testi e vorrei estrarre da ognuno di questi testi, una lista
delle singole parole di cui è composto aggregate per parola e con un
numero affianco per l'occorrenza associata.
Non mi viene in mente da dove partire onestamente.
Subject: Indice e concordanza
Date: Fri, 30 Nov 2007 02:30:01 -0800
Newsgroups: microsoft.public.it.office.word
www.google.it/groups?threadm=B42075D6-2DF4-46DB-ADEE-***@microsoft.com
--
Tiziano Marmiroli
Microsoft MVP - Office System
r
2008-05-07 17:32:14 UTC
Permalink
ho dovuto fare una correzione ...
quindi diventa:
da lanciare sempre AnalizzaTestoStart
ciao
r

Sub AnalizzaTestoStart()
Dim Wb As Excel.Workbook
Dim Sh(1) As Excel.Worksheet
Dim rngT As Excel.Range
Dim arrRng() As Variant
Dim testo As String
Dim V1 As Variant

Const NomeSh As String = "Analizzare testo"
Set Wb = ActiveWorkbook
On Error Resume Next
Set Sh(0) = Wb.Worksheets(NomeSh)

Application.ScreenUpdating = False

If Sh(0) Is Nothing Then
Err.Clear
Set rngT = Wb.Worksheets.Add.Range("a1")
rngT.Parent.Name = NomeSh
Set Sh(0) = Wb.Worksheets(NomeSh)
Else
Sh(0).Select
Sh(0).Cells.Clear
Set rngT = Sh(0).Range("a1")
rngT.Select
End If

Application.ScreenUpdating = True

rngT.Copy

Application.CutCopyMode = False

MsgBox "selezionare il testo e copiarlo in Clipboard(Ctrl+C) poi dare l'OK"

Sh(0).Paste

If Err Then
Err.Clear
MsgBox "Clipboard vuota!"
Application.ScreenUpdating = True
Exit Sub
Else
Application.CutCopyMode = False
Set rngT = Sh(0).UsedRange
End If

On Error GoTo 0

arrRng = rngT

Sh(0).Cells.Clear
Set rngT = Sh(0).Range("a1")

rngT.value = "Ascii"
rngT.Offset(0, 1) = "Carattere"
rngT.Offset(0, 2) = "Frequenza"
rngT.Offset(0, 4) = "Parola"
rngT.Offset(0, 5) = "Frequenza"

For Each V1 In arrRng
testo = testo & V1 & " "
Next

Call AnalizzaTesto(testo)
Application.ScreenUpdating = True

End Sub

Function AnalizzaTesto(ByVal testo As String) As Variant
Dim p As Long, v As Long, DP As Long, PV As Long
Dim arrB() As Byte
Dim arrChr(255) As Long, I As Long, a As Long
Dim Temp As Variant

arrB = testo
Debug.Print "Totale caratteri" & UBound(arrB) / 2

For I = 0 To UBound(arrB) Step LenB("A")
Temp = arrB(I)
arrChr(Temp) = arrChr(Temp) + 1
Select Case Temp
Case 65 To 90
Case 97 To 122
Case 192 To 255
Case Else
arrB(I) = 32
End Select
Next
a = 1

For I = 0 To 255
Temp = arrChr(I)
If Temp Then
a = a + 1
ActiveSheet.Cells(a, 1) = I
ActiveSheet.Cells(a, 2) = Chr(I)
ActiveSheet.Cells(a, 3) = Temp
End If
Next
testo = arrB
Debug.Print testo
Call AnalizzaTesto2(testo)

End Function

Function AnalizzaTesto2(testo As String) As Variant
Dim arr As Variant
Dim v As Variant
Dim c As Long
Dim r As Long
Dim t1 As Long, t2 As Long

arr = Split(testo, " ")
arr = CreaVetUnivoco(arr)
c = 5
t1 = UBound(arr, 2)
r = 1
For t2 = 0 To t1
r = r + 1
If r = 65536 Then
r = 1
c = c + 2
End If
Cells(r, c) = arr(0, t2)
Cells(r, c + 1) = arr(1, t2)

Next

End Function


Function CreaVetUnivoco(Arr2) As Variant
Dim NoDupes As New Collection
Dim arr()
Dim v
Dim Temp
Dim Tempn As Long
Dim Index As Long
Dim c As Long
Dim Ncol As Long
Dim Ultimo As Long
Dim Primo As Long
Dim ValArr
Dim Arr3()


Set NoDupes = New Collection
Ultimo = UBound(Arr2)
Primo = LBound(Arr2)
ReDim arr(Ultimo)

For Each ValArr In Arr2
If Not IsEmpty(ValArr) Then
arr(c) = UCase(ValArr)
c = c + 1
End If
Next
ReDim Preserve arr(c - 1)
Set NoDupes = Nothing
arr = Shell_m_VetAZ(arr)
ReDim Arr3(1, c - 1)
c = 0
On Error Resume Next
For Each ValArr In arr
If ValArr = "Zodïaco" Then MsgBox "alt"
NoDupes.Add 0, CStr(ValArr)
If Err Then
Err.Clear
Tempn = Arr3(1, c - 1)
Arr3(1, c - 1) = Tempn + 1
Else
Temp = ValArr
If Not IsEmpty(Temp) Then
Arr3(0, c) = Temp
Arr3(1, c) = 1
c = c + 1
End If
End If
Next
On Error GoTo 0
ReDim Preserve Arr3(1, c - 1)
Set NoDupes = Nothing
CreaVetUnivoco = Arr3
End Function

Function Shell_m_VetAZ(arr() As Variant) As Variant
Dim value, Index As Long, index2 As Long
Dim Ultimo As Long
Dim Primo As Long
Dim metro As Long
Dim tot As Long

Primo = LBound(arr)
Ultimo = UBound(arr)
tot = Ultimo - Primo + 1

Do
metro = metro * 3 + 1
Loop Until metro > tot

Do
metro = metro / 3
For Index = metro + Primo To Ultimo
value = arr(Index)
index2 = Index
Do While (arr(index2 - metro) > value) Xor False
arr(index2) = arr(index2 - metro)
index2 = index2 - metro
If index2 - metro < Primo Then Exit Do
Loop
arr(index2) = value
Next
Loop Until metro = 1
Shell_m_VetAZ = arr
End Function

Loading...