Procurando extrair usuário individual (@) menciona de uma lista de Tweets em um documento do Excel

1

Eu tenho uma lista de ~ 1000 tweets de um usuário que estou monitorando. Gostaria de poder controlar quantas menções de usuários exclusivas (ou seja, as aparências de @anyUserName ) estão dentro das strings.

Cada tweet é armazenado em uma única célula. Eu quero ser capaz de extrair a string @ variable-length da célula.

Demorei alguns dias, gostaria de receber ajuda.

Obrigado

    
por Adam 10.04.2014 / 15:14

2 respostas

1

Agora, vendo seus dados, se você quiser extrair vários @s por tweet, você teria que ter uma coluna por instância que está navegando:

=IFERROR(MID($A2,FIND("|",SUBSTITUTE($A2,"@","|",B$1)),IFERROR(FIND(" ",$A2,FIND("|",SUBSTITUTE($A2,"@","|",B$1))),LEN($A2)+1)-FIND("|",SUBSTITUTE($A2,"@","|",B$1))),"")

Coloque isso no B2 e copie para baixo e para cima.

Isso parece esmagador, mas a temporariedade substitui a enésima instância de @ por um caractere diferente (um que provavelmente não será usado em um tweet, um pipe "|") e, em seguida, localizará esse local e o próximo espaço após. Se não houver espaço depois, ele lida com o nome sendo a última coisa no tweet.

Neste exemplo, seus tweets estão na coluna A começando na linha 2 (suponha que o cabeçalho seja a linha 1). Você pode colocar essa fórmula em B2 e copiar para a direita para quantas colunas precisar. Está esperando que seu cabeçalho seja o nome a ser extraído. Assim:

    
por 10.04.2014 / 15:34
3

Aqui está uma solução VBA. Basta colar o seguinte código em um módulo (Pressione Alt + F11 e vá para Insert > > Module ). Selecione sua lista de tweets e execute (pressionando F5 na janela do Editor VBA).

Sub getUniqueUsers()
Dim r As Range, users As Object, Tweets() As Variant, ns As Worksheet
Dim i As Long, j As Long, k As Long
Dim rgx As Object, Matches As Object, M As Object, key As Variant
Set r = Selection
'Load tweets into array for fast processing
Tweets = r.Value
'create scripting objects
Set users = CreateObject("Scripting.dictionary")
Set rgx = CreateObject("vbscript.regexp")
rgx.MultiLine = True
rgx.Pattern = "(^| )(@[^ \t]+)"
'Check each tweet for user mentions with regular expression matching. Add all matches to dictionary.
For j = LBound(Tweets, 2) To UBound(Tweets, 2)
    For i = LBound(Tweets, 1) To UBound(Tweets, 1)
        Set Matches = rgx.Execute(Tweets(i, j))
        For Each M In Matches
            If Not users.exists(M.submatches.Item(1)) Then
                users.Add M.submatches.Item(1), M.submatches.Item(1)
            End If
        Next M
    Next i
Next j
'Output list to new sheet
Set ns = Worksheets.Add
ns.Name = "Unique User Mentions"
k = 1
For Each key In users
    ns.Range("A" & k).Value = key
    k = k + 1
Next key
End Sub

Este código usa expressões regulares e objetos de script de dicionário. Ele encontrará as menções do usuário em cada tweet e as armazenará em um dicionário. O dicionário é usado para garantir exclusividade. Finalmente, as menções exclusivas do usuário são impressas na coluna A em uma nova planilha.

    
por 10.04.2014 / 16:21