Как сделать анализ поисковых запросов

Тема в разделе "Вопросы и ответы", создана пользователем Sota, 15.01.16.

  1. Sota

    Sota Активный участник

    Сообщения:
    257
    Симпатии:
    63
    Баллы:
    56
    Есть небольшой скрипт, который собирает запросы с яндекса, с прямого эфира, то есть то, что вводят пользователи вживую. Как среди них выделить новые тренды? Допустим вышел новый фильм Зима в огне. В списке запросов проскакивают такие:


    Зима в огне скачать
    Зима в огне смотреть
    онлайн смотреть Зима в огне
    Зима в огне торрент

    Только сам тренд изначально не известен, поэтому нужно проанализировать все запросы и оценить частотность. Такое можно сделать в КК с помощью анализа групп, но хочется более простое решение.
    ------------------- Добавлено 15.01.16 -------------------
    Отвечаю сам себе. Набросал шаблончик на зенке, закинул 300 запросов, хотя в день несколько тысяч парсится. Скрипт работал полчаса без отрисовки(т.е. максимальная скорость практически), получилось вот что:
    в 21
    на 16
    и 9
    купить 7
    для 6
    2015 6
    как 5
    с 5
    смотреть 4
    онлайн 3
    из 3
    официальный 3
    сайт 3
    видео 3
    фото 3
    скачать 2
    бесплатно 2
    по 2


    Какой вывод? Или без учета морфологии эта тема не катит, или надо повышать объемы, но при этом увеличивать скорость обработки.
    Как вариант - добавить проверку и отбросить предлоги(с, в, к, как), добавить стоп-слова.
     
  2. wave

    wave Новичок

    Сообщения:
    56
    Симпатии:
    11
    Баллы:
    13
    А тебе именно запросы нужны, просмотры по СМИ и соцсетям не подойдут?
     
  3. Sota

    Sota Активный участник

    Сообщения:
    257
    Симпатии:
    63
    Баллы:
    56
    А что за просмотры? Я хочу выбрать из прямого эфира популярные тренды.
     
  4. wave

    wave Новичок

    Сообщения:
    56
    Симпатии:
    11
    Баллы:
    13
    mediametrics.ru можно сортировать по времени и темам

    новые тренды гугла google.ru/trends/hottrends

    хз поможет или нет :)
     
  5. sheck

    sheck Новичок

    Сообщения:
    47
    Симпатии:
    21
    Баллы:
    14
    года 2 назад писал VBS-скрипт для excel, который парсит столбец кейвордов и чекает отдельные слова на частоту повторений:

    Код:
    Attribute VB_Name = "Module1"
    Option Explicit
    
    Sub MakeWordList()
    Attribute MakeWordList.VB_ProcData.VB_Invoke_Func = "w\n14"
        Dim InputSheet As Worksheet
        Dim WordListSheet As Worksheet
        Dim WordStatSheet As Worksheet
        Dim PuncChars As Variant, x As Variant
        Dim i As Long, r As Long
        Dim Txt As String
        Dim wordCnt As Long
        Dim LastRow As Long
        Dim AllWords As Range
        Dim PC As PivotCache
        Dim PT As PivotTable
      
        ''''''''''''''''''''''''
        Dim TxtCurrent As String
        Dim SameAsCurrent As String
        Dim TxtStatAll As String
        Dim StatAll As Long
        ''''''''''''''''''''''''
      
        Application.ScreenUpdating = False
      
        Application.DisplayAlerts = False
        On Error Resume Next
        With ActiveWorkbook
        .Sheets("All Words").Delete
        .Sheets("WS").Delete
        .Save
        End With
        Application.DisplayAlerts = True
      
        Set InputSheet = ActiveSheet
        Set WordListSheet = Worksheets.Add(after:=Worksheets(Sheets.count))
        Set WordStatSheet = Worksheets.Add(after:=Worksheets(Sheets.count))
        WordListSheet.Name = "All Words"
        WordStatSheet.Name = "WS"
        WordListSheet.Range("A1") = "All Words"
        WordListSheet.Range("A1").Font.Bold = True
        InputSheet.Activate
        wordCnt = 2
        PuncChars = Array(".", ",", ";", ":", "'", "!", "#", "$", "%", "&", "(", ")", " -", "- ", "_", "--", "+", "=", "~", "/", "\", "{", "}", "[", "]", """", "?", "*")
        r = 2
      
        Do While Cells(r, 1) <> ""
            Txt = LCase(Cells(r, 1))
            For i = 0 To UBound(PuncChars)
                Txt = Replace(Txt, PuncChars(i), "")
            Next i
            Txt = WorksheetFunction.Trim(Txt)
            x = Split(Txt)
            For i = 0 To UBound(x)
                WordListSheet.Cells(wordCnt, 1) = x(i)
                wordCnt = wordCnt + 1
            Next i
        r = r + 1
        Loop
      
        WordListSheet.Activate
        Set AllWords = Range("A1").CurrentRegion
        Set PC = ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=AllWords)
        Set PT = PC.CreatePivotTable(TableDestination:=Range("C1"), TableName:="WS")
        With PT
            .AddDataField .PivotFields("All Words")
            .PivotFields("All Words").Orientation = xlRowField
        End With
      
        LastRow = Cells(Rows.count, 3).End(xlUp).Row
        Range("C3:D" & (LastRow - 1)).Select
        Selection.Copy
        WordStatSheet.Activate
        Range("A1").Select
        ActiveSheet.Paste
      
        LastRow = Cells(Rows.count, 1).End(xlUp).Row
        Range("A1:B" & LastRow).Select
        ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$B" & LastRow), , xlNo).Name = "WS"
        Range("A1:B" & LastRow).Select
        ActiveSheet.ListObjects("WS").TableStyle = "TableStyleMedium9"
          
        Range("B1").Select
        ActiveWorkbook.Worksheets("WS").ListObjects("WS").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("WS").ListObjects("WS").Sort.SortFields.Add Key:=Range("B1:B214"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("WS").ListObjects("WS").Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
      
        Application.DisplayAlerts = False
        With ActiveWorkbook
        WordListSheet.Delete
        .Save
        End With
        Application.DisplayAlerts = True
      
        ''''''''''''''''''''''
        i = 2
        Do While Cells(i, 1) <> ""
            r = i + 1
            TxtCurrent = Cells(i, 1)
            SameAsCurrent = "'" & Cells(i, 1)
            TxtStatAll = "/ " & Cells(i, 2)
            StatAll = Cells(i, 2)
            Do While Cells(r, 1) <> ""
                If Equality(Cells(r, 1), TxtCurrent) > 3 Then
                    SameAsCurrent = SameAsCurrent & ", " & Cells(r, 1)
                    TxtStatAll = TxtStatAll & " / " & Cells(r, 2)
                    StatAll = StatAll + Cells(r, 2)
                    WordStatSheet.Rows(r).Delete
                End If
            r = r + 1
            Loop
        Range("C" & i).Select
        ActiveCell.FormulaR1C1 = SameAsCurrent
        Range("D" & i).Select
        ActiveCell.FormulaR1C1 = StatAll
        Range("E" & i).Select
        ActiveCell.FormulaR1C1 = TxtStatAll & " /"
        i = i + 1
        Loop
        ''''''''''''''''''''''
    
    
    
        WordStatSheet.Columns(1).Delete
        WordStatSheet.Columns(1).Delete
      
        Range("A1").Select
        ActiveCell.FormulaR1C1 = "Слово"
        Range("B1").Select
        ActiveCell.FormulaR1C1 = "Частота"
        Range("C1").Select
        ActiveCell.FormulaR1C1 = "Вхождения"
        WordStatSheet.Columns.AutoFit
      
        Range("B1").Select
        ActiveWorkbook.Worksheets("WS").ListObjects("WS").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("WS").ListObjects("WS").Sort.SortFields.Add Key:=Range("B1:B214"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("WS").ListObjects("WS").Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
        '''''''''''''''''''''
    
    End Sub
    
    ''''''''''''''''''''''
    Function Equality(t1 As String, t2 As String) As Integer
    
        Dim s As String, s1 As String
        Dim n As Long, k As Long
    
    Equality = 0
    n = 1
    For n = 1 To Len(t1)
        For k = n To Len(t1)
            s = Mid(t1, n, k)
            s1 = s & "*"
            If t2 Like s1 Then
                If (k - n + 1) > Equality Then Equality = k - n + 1
            End If
        Next k
    Next n
    End Function
    ''''''''''''''''''''''

    наверно его можно использовать
     
  6. mordvin

    mordvin Модератор Команда форума

    Сообщения:
    215
    Симпатии:
    161
    Баллы:
    57
    sheck нравится это.
  7. sheck

    sheck Новичок

    Сообщения:
    47
    Симпатии:
    21
    Баллы:
    14
    Такую штуку бы на десктоп, чтобы не ограничивать объемы обработки, а то 5к ключей уже не помещается (((
     
  8. mordvin

    mordvin Модератор Команда форума

    Сообщения:
    215
    Симпатии:
    161
    Баллы:
    57
    Про дескоп не знаю. Мне кажется ее легко написать на php. Может готовые есть уже скрипты
     
  9. sheck

    sheck Новичок

    Сообщения:
    47
    Симпатии:
    21
    Баллы:
    14
    Вот, сделал примерчик, только .xlsm нельзя прикреплять, переименуйте после скачивания.

    Краткий мануал: на первом листе вставляем список ключевиков, нажимаем Ctrl+J
     

    Вложения:

    • test.txt
      Размер файла:
      26 КБ
      Просмотров:
      18
    azi нравится это.
  10. quick

    quick Новичок

    Сообщения:
    12
    Симпатии:
    12
    Баллы:
    8
    textpipe 140к кейвордов обработал за 3.8 секунды
    обрабатывал и миллионные базы - время уже не помню но вполне адекватное

    http://c2n.me/3sYSi6s

    http://rghost.ru/7gtlQ56tB textpipe

    http://rghost.ru/8wYKWNyvT фильтр разбивки


    p.s. разберитесь c textpipe все вопросы по обработке текста отпадут
     
    leery, Sota, mordvin и ещё 1-му нравится это.

Поделиться этой страницей