Что хороший путь состоит в том, чтобы выбрать случайную группу пользователей Твиттера?

Рассмотрение группы пользователей Твиттера "узлы" и отношение u follows v как "края", у нас есть график, из которого я хотел бы выбрать подмножество пользователей наугад. Я мог быть неправым, но от чтения документов API я думаю, что невозможно получить набор пользователей кроме путем получения подписчиков или друзей уже известного пользователя.

Так, начиная от меня и исследуя график Твиттера оттуда, из чего хороший путь состоит в том, чтобы выбрать случайную выборку (говорят 100), пользователи?

6
задан I. J. Kennedy 7 February 2010 в 00:55
поделиться

4 ответа

Я бы держался подальше от P/Invoke, поскольку это довольно медленно по сравнению с IJW (It Just Works). Последний позволяет плавно переплетать управляемые и неуправляемые c++. Все, что вам нужно сделать, это создать управляемую сборку c++, записать управляемый класс, который виден из c #, и вызвать неуправляемый код из этого.

Uhm... Ок. Я был под впечатлением, что P/Invoke звонки были медленнее, что они по своей природе. Однако, имея явный контроль над сортировкой, вы можете сделать свою версию C + +/CLI, чтобы работать лучше во многих случаях.

Вот статья Microsoft об обоих механизмах:

http://msdn.microsoft.com/en-us/library/ms235282.aspx

Преимущества IJW

  • Нет необходимости писать объявления атрибутов DLLImport для неуправляемые API, используемые программой. Просто включить файл заголовка и ссылку с библиотека импорта.
  • Механизм IJW немного быстрее (например, заглушки IJW не необходимо проверить необходимость закрепления или копировать предметы данных, поскольку это сделано явно разработчиком).
  • Это наглядно иллюстрирует проблемы производительности. В данном случае то, что выполняется перевод из Юникода последовательность в последовательность ANSI и иметь распределение памяти оператора и освобождение. В этом случае a разработчик пишет код с помощью IJW осознает, что призвание _putws и использование PtrToStringChars было бы лучше для выполнения.
  • При вызове нескольких неуправляемых API, использующих одни и те же данные, выполняется их сортировка один раз и прохождение упакованной копии гораздо эффективнее, чем повторная упаковка каждый раз.

Есть и эстетические преимущества:

  • Код C # выглядит как код C # без какой-либо странности взаимодействия.
  • Нет необходимости определять атрибут DLLImport , нет необходимости определять какие-либо структуры данных (также с определенными атрибутами p/invoke), которые могли бы выглядеть следующим образом:

    [StructLayout (LayoutKind.Sequential, CharSet = CharSet.Ansi)] публичная структура DevMode { [MarshalAs (UnmanagedType.ByValTStr, StartConst = 32)] общедоступная последовательность dmDeviceName; }

  • Нет необходимости преобразовывать все типы примитивов параметров в их аналоги .NET (на этой странице содержится таблица, в которой показано, как управляемые типы сопоставляются с неуправляемыми типами).
  • Вы можете работать с C + +/CLI, который очень весело изучать и который действительно отшлифован. Он прошел долгий путь с VS 2003 и теперь является полноценным языком .NET. Документация Microsoft для него довольно хорошая, как и вся информация IJW.
  • Выполнение взаимодействия C++ в C + +/CLI кажется очень естественным по сравнению с C #. Это совершенно субъективно, но я бы предпочел сделать сортировку последовательностей в C++, которые делают Marshal.PtrToString (ptr) .
  • При раскрытии API вы, вероятно, захотите завершить весь материал P/Invoke на другом уровне, поэтому вам не придется иметь дело с уродством P/Invoke. Таким образом, вы имеете служебные данные всех маршалингов И уровня C # вокруг него.С C + +/CLI маршалинг и абстракция взаимодействия находятся в одном месте, и вы можете выбрать, сколько кроссинга вам нужно.

IMHO при вызове нечетной функции в Windows SDK используйте P/Invoke. Если вы представляете умеренно сложный C++ API управляемому миру, определенно C + +/CLI.

-121--922064-

Это также происходит при устаревшей или неполной установке PHPUnit. Помните, что после настройки PEAR необходимо добавить канал PHPUnit.de , чтобы получить актуальный пакет.

-121--830663-

Я бы использовал числовой идентификатор пользователя . Создайте кучу случайных чисел и получите пользователей на их основе. Если вы попали в несуществующий идентификатор, просто пропустите его.

Twitter API wiki, для пользователей/show:

id. Идентификатор или имя экрана пользователя.

5
ответ дан 10 December 2019 в 00:38
поделиться

Если шесть степеней разделения верны, вы можете выполнить поиск в ширину до 6 уровней и выбрать 100 случайных пользователей из этого списка. Или вы можете сказать: я перестану искать больше пользователей, когда получу, скажем, миллион уникальных пользователей и 100 из них.

Поскольку сохранение списка миллионов пользователей и попытка выборки могут быть недопустимыми, существует метод, называемый Выборка резервуара , который вы можете использовать, который позволяет вам выполнять выборку во время самого обхода.

1
ответ дан 10 December 2019 в 00:38
поделиться

Просто запросите общедоступную временную шкалу и используйте возвращенный набор пользователей:

http://apiwiki.twitter.com/Twitter-REST-API -Метод% 3A-statuses-public_timeline

Это не будет случайным, поскольку это всего лишь последние 20 твитов, отправленных кем-либо, но, скорее всего, это никогда не будет одним и тем же набором пользователей дважды.

Поскольку он дает вам только 20 за раз, а результаты кешируются на их серверах в течение 60 секунд, вам придется выполнить 5 разных запросов с 60-секундной паузой между ними.

Конечно, также возможно, что некоторые пользователи будут часто твитить в течение определенного периода времени, поэтому вы можете получить менее 100 пользователей за это время, поэтому вы можете просто зацикливаться, пока не получите 100, если вам нужно к.

1
ответ дан 10 December 2019 в 00:38
поделиться

Если у вас нет всей диаграммы пользователей Twitter (или ее случайной выборки), вы не сможете взять случайную выборку. В противном случае любой образец, который вы берете, будет предвзятым из-за его отношения к вам.

1
ответ дан 10 December 2019 в 00:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: