Автоматизация контент-анализа СМИ

1.
Введение

Контент-анализ - один из самых популярных ныне методов исследования, позволяющий получить максимально точные сведения об исследуемом объекте. Попытки компьютеризировать этот метод предпринимались давно и сейчас существует большое количество программ, позволяющих исследовать заданные конструкты в имеющихся данных. От SPSS до Статистики, - все эти методы с разной степенью точности позволяют изучать имидж исследуемого явления. Однако, ни один из них не может дать точной корреляции между исследуемыми конструктами / смысловыми формами. Эту задачу решает методика Чарльза Осгуда, компьютерная версия которой и будет описана ниже.

2.
Математическое обоснование методики

По сути, метод заключается в расчете коэффициента корреляции. В теории вероятностей и мат. статистике это - величина, характеризующая степень связи между двумя переменными X и Y:

ϱ=cov(X,Y)D(X)D(Y)=E(XY)E(X)E(Y)D(X)D(Y)\varrho = \frac{cov(X,Y)}{\sqrt{D(X) \cdot D(Y)}}=\frac{E(XY)-E(X)E(Y)}{\sqrt{D(X) \cdot D(Y)}}

здесь covcov означает ковариацию, EE - мат. ожидание, а DD - дисперсию.

ПустьXX и YY - это дискретные случайные величины, описывающие факт обнаружения элемента содержания (слова или словосочетания) в отдельно взятой статье исследуемого материала, а XYXY - дискретная случайная величина, описывающая их совместное обнаружение. Пусть эти случайные величины могут принимать одно из двух значений (0 или 1):

Xi=1X_i = 1 - если искомый элемент встречается в статье i

Xi=0X_i = 0 - если не встречается

Оценку вероятности события "элемент X обнаружен в отдельно взятой исследуемой статье", можно записать так:

Px=P(X=1)=nxNPx = P(X=1)=\frac{n_x}{N} , где nxn_x - это количество статей, в которых фактически встречается искомый элемент содержания, а N - общее число исследуемых статей.

Математическое ожидание случайной величины E(X) можно оценить так:

E(X)=0P(X=0)+1P(X=1)=PX=nXNE(X)=0 \cdot P(X=0) + 1 \cdot P(X = 1)=P_X=\frac{n_X}{N}

Аналогично можно оценить E(Y)E(Y) и E(XY)E(XY)

В качестве оценки дисперсии возьмем:

D(X)=(NnX)(0nXN)2+nX(1nXN)2N1D(X)=\frac{(N-n_X)(0-\frac{n_X}{N})^2 + n_X \cdot (1-\frac{n_X}{N})^2}{N-1}

Подставив оценки мат. ожидания и дисперсии в исходную формулу для корреляции, получим оценку силы семантической связи между двумя элементами содержания ϱ\varrho.

Коэффициент корреляции ϱ\varrho может принимать значения

1ϱ1-1 \leq \varrho \leq 1

Причем чем больше модуль ϱ|\varrho|, тем больше семантическая связь между элементами содержания X и Y.

3.
Реализация методики

Следующий блок кода на языке Julia реализует приведенные выше формулы:

Pkg.add("PlotlyJS")
Pkg.add("Requests")
Pkg.add("MarketTechnicals")
using PlotlyJS
using Requests: get
using MarketTechnicals

count_articles(x,y,m,g) = Requests.json(get("https://npaleeva-toolkit.herokuapp.com/queries/osgood"; query = Dict("q" => x, "q2" => y, "m" => m, "g" => g)))
my_plot(data, field) = Plot(scatter(x=data["dates"], y=data[field]), Layout(yaxis_range=[min(minimum(data[field]), 0),maximum(data[field])]))


function osgood(x, y, m="", w=5, g="month",)
  data = count_articles(x, y, m, g)

  D(n, N, E) = ((N-n) * E^2 + n * (1-E)^2) / (N-1)
  S(Exy, Ex, Ey, Dx, Dy) = (Exy - Ex * Ey) / sqrt(Dx * Dy)

  # appplying moving averages
  moving_average(arr) = sma(arr, w)[:,1]
  N = moving_average(data["total"])
  Nx = moving_average(data["x"])
  Ny = moving_average(data["y"])
  Nxy = moving_average(data["xy"])

  # we can't apply moving averages to dates, so we use "median" approach instead
  shift = convert(Int8, floor(w/2))
  data["dates"] = data["dates"][1+shift:length(data["dates"])-shift]

  data["Px"] = Ex = Nx ./ N
  data["Py"] = Ey = Ny ./ N
  data["Pxy"] = Exy = Nxy ./ N

  data["Dx"] = Dx = D.(Nx, N, Ex)
  data["Dy"] = Dy = D.(Ny, N, Ey)

  data["correlation"] = S.(Exy, Ex, Ey, Dx, Dy)

  return data
end


function plot_osgood(args...)
  data = osgood(args...)
  my_plot(data, "correlation")
end
Done
osgood
Julia

В связи с большим объемом исследуемого материала (около 300 тысяч статей из Самарских изданий за 2011-2014 годы), сам подсчет упоминаний выполняется в облачной базе данных.

4.
Методика в действии

На графике ниже видно, как возрастает корреляция между словами "президент" и "выборы"в новостной ленте регионального издания "Комсомольская правда" в связи с президентскими выборами 4 марта 2012 г:

plot_osgood("выборы", "президента", "kp_samara_news", 5)
Done
gentle-shape
Julia