pavki/hr_qa_sbs_best_bad huggingface dataset:
Вопрос: Указатели в языке Си?

Лучший ответ: почему программа завершилась? Вмешалась ОС? Но если так, то почему?
Потому что у тебя был неинициализированный указатель, который по стечению обстоятельств указывал в область памяти которую можно читать (мы это знаем, поскольку ты смог оттуда прочитать значение) но нельзя изменять (поскольку ну ты понял).

Почему я не могу поменять значение самого указателя (ведь указатель - это всего лишь ссылка на адрес памяти, а не на значение).
Значение указателя ты поменять можешь, но это не то, что было написано в коде. В коде было написано поменять значение на которое указатель указывает. Поменять указатель было бы a = (int *)10;

могу ли я указателю дать ссылку на конкретную ячейку в памяти?
Можешь, но под ОС с виртуальной памятью это в большинстве случаев не имеет смысла. API в таких ОС обычно устроены так, что ты просишь выделить область памяти с заданными характеристиками, а ОС выполняет выделение и возвращает тебе адрес выделенного участка.

получаю ошибку, ведь вряд ли адрес памяти у указателя хранится в виде 16-ричного целочисленного литерала.
В памяти всё хранится как последовательность байтов. Любую последовательность байтов можно проинтерпретировать как указатель. Но чтобы компилятор С понял что ты имеешь в виду, ему надо явно сказать, что ты хочешь проинтерпретировать целое число как адрес: int *a = (int *)0x0061FF18;

Худший ответ: Вмешалась ОС? Но если так, то почему?
Потому что классическая ошибка - использование неинициализированного указателя. Ты обьявил a указателем на целое, но не присвоил ему никакого значения (через malloc(), calloc() или функции, возвращающие указатель). Обьявленная переменная была выделена в куче и получила какое-то мусорное значение, доступное твоей программе (вполне может быть указатель на часть кода, например, на ядро, на общие функции). Ты его прочитал.
При попытке записать по данному адресу поймал SIGSEGV, потому что данный адрес твоей программе по записи недоступен. Все, как должно быть.
могу ли я указателю дать ссылку на конкретную ячейку в памяти?
Теоретически можешь, но практически ось тебе сразу выдаст SIGSEGV, потому что писать ты можешь только в те области памяти, которые тебе доступны по записи.
warning: initialization of 'int *' from 'int' makes pointer from integer without a cast
Ну правильно говорит - инициализация делается без приведения типа. Такой финт ушами часто делают со строками - по умолчанию выставляя там указатель на NULL (что обычно означает, что строке еще не выделялась память), напрмер
char *str = (char *) NULL;
Вопрос: Можно ли подключить 1 монитор к материнке а второй к видеокарте? Они будут так работать?

Лучший ответ: Можно, если ваша материнка поддерживает одновременную работу дискретной и встроенной графики.
Если нет, то выход только один - использовать видеокарту с двумя выходами.

Худший ответ: Если на видеокарте есть VGA значит скорее всего есть и DVI-I, используйте переходник DVI-I - VGA для подключения второго монитора
Вопрос: Как запросом проверить входит ли дата из списка в диапазон дат?

Лучший ответ: Выносите даты в отдельную таблицу:
Название таблицы: location_event_dates
id - идентификатор даты;
location_event_id - идентификатор из таблицы location_event (то, что у вас в вопросе)
event_date - одна из дат события (в формате даты, а не строки!)
Тогда будет нормальный поиск:
select le.id, le.locationid, le.eventid,
          led.event_date
from location_event le
join location_event_dates led on led.location_event_id = le.id
where led.event_date between :begin_date and :end_date

Худший ответ: Для MySQL 8 можно, но запрос страшненький
WITH RECURSIVE `cte` AS (
  (SELECT `id`, `locationid`, `eventid`,
          TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT(`list`, ','), ',', 1), ',', -1)) AS `date`,
          1 AS `idx`
    FROM `test`
    HAVING `date` != '')
  UNION
  (SELECT `t`.`id`, `t`.`locationid`, `t`.`eventid`,
          TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT(`t`.`list`, ','), ',', `cte`.`idx` + 1), ',', -1)) AS `date`,
          `cte`.`idx` + 1
     FROM `cte`
     JOIN `test` AS `t` ON `t`.`id` = `cte`.`id`
     HAVING `date` != '')
),
SELECT `id`, `locationid`, `eventid`, 
       CONCAT (SUBSTRING(`date`, 7, 4), '-', SUBSTRING(`date`, 4, 2), '-', SUBSTRING(`date`, 1, 2)) AS `date`
  FROM `cte`
  HAVING `date` >= :firstDate AND `date` < :lastDate
Лучше один раз потратить время и нормализовать таблицу.
Вопрос: Как вывести результат по запросу из SQL в 1с?

Лучший ответ: Проще всего добавить внешний источник данных и дальше можно обращаться с ним, как со справочником или регистром сведений

Худший ответ: Проще всего добавить внешний источник данных и дальше можно обращаться с ним, как со справочником или регистром сведений
Вопрос: Нужно ли открывать файлы стилей в роботс?

Лучший ответ: Вот вопрос - есть ли в этом логика и насколько сильно влияет на SEO?Любой современный робот оценивает юзабилити, в частности скорость загрзки, контент лэйаут шифтинг, расположение ключевых элементов и т.д., что можно посмотреть в том же гугл пэйджспид. Ясное дело что без цсс и жс он этого просто не увидит. И да, гугл учитывает все это в ранжировании.

Худший ответ: Лучше открыть для гугла файлы стилей. Без этого появляются проблемы с трафиком с Гугла. И потом довольно долго все выправляется.
Вопрос: Достаточно ли безопасна реализация удаленного доступа?

Лучший ответ: Небезопасно просто потому, что вы изобрели лисапед вместо SSL.
Как минимум, отсутствует наглухо защита от MitM

Худший ответ: "Ты бы подумал наперед, чем городить свой огород" (С) советский мультик 

Зачем придумывать что-то когда есть SSL? Берется nrpe/nsclient++ - бинарник агента для выполнения датчиков мониторгинга nagios и изучается.
Потом создается CA, в нем выпускаются сертификаты для всех точек, расставляются, настраиваются.
БИНГО!

Да, от какеров Ваша система может быть эффективной, потому что ее никто не знает. Но при столкновении с более-менее продвинутым атакующим она тут же рухнет - потому что Вы не можете написать лучше чем вся команда OpenSSL :)
Вопрос: Как сделать backup KeePassXC удобно?

Лучший ответ: на компе под пингвином, подключил диск (в моем случае от яндекса) далее простым скриптом в конце рабочего дня копирую файл базы кипаса на облачный диск. Ну и в архив под паролем на всякий случай.

Худший ответ: В официальном FAQ написано
KeePassXC does not support plugins

Как альтернативу, можно использовать классический KeePass, собранный под Linux (apt-get install keepass2)
Или запускать виндовый KeePass под Wine
Вопрос: Как поменять аттрибуты папки через ftp с помощью c#?

Лучший ответ: сhmod - не стандартная фтп команда, потому ее поддержка зависит исключительно от желания разработчиков фтп сервера. судя по "метод не поддерживается" - у вас как-раз ситуация когда ее не реализовали.

посмотреть список доступных комманд можно через help. Например, для файлзиллы: 
Command:	help
Response:	214-The following commands are recognized:
Response:	   ABOR   ADAT   ALLO   APPE   AUTH   CDUP   CLNT   CWD 
Response:	   DELE   EPRT   EPSV   FEAT   HASH   HELP   LIST   MDTM
Response:	   MFMT   MKD    MLSD   MLST   MODE   NLST   NOOP   NOP 
Response:	   OPTS   PASS   PASV   PBSZ   PORT   PROT   PWD    QUIT
Response:	   REST   RETR   RMD    RNFR   RNTO   SITE   SIZE   STOR
Response:	   STRU   SYST   TYPE   USER   XCUP   XCWD   XMKD   XPWD
Response:	   XRMD
Response:	214 Have a nice day.

Ну и в таком случае - никак вы не поменяете т.к. фтп сервер не умеет такое делать. Поиск других нугет пакетов с другими клиентами не поможет т.к. причина - то, как сам фтп сервер реализует протокол.

UPD: судя по RFC1123 - ожидаемая комманда должна быть SITE CHMOD 777 FILENAME, остальные варианты - шаг в сторону от стандарта

Худший ответ: Простейший метод это поставить nuget пакет с этой функциональностью. Поищите их их там много
Вопрос: Как сделать прогресс бар скачивания одного файла?

Лучший ответ: нужно создать потоковый контекст и использовать stream-notification-callback (см. пример).

Функция будет вызываться в процессе загрузки / выгрузки файла, сообщая о количестве переданных байтов. Это то, что нужно для отрисовки прогресс-бара.

Худший ответ: сделайте через js, например, dropzone js
Вопрос: Почему не считывается value инпута?

Лучший ответ: Вы считываете значения инпута однократно, в момент выполнения функции test. Для того чтобы это работало как вы хотите - нужно вешать обработчик на инпут, реагирующий на изменение значения в нем
let test = () => {
let inp = document.querySelector('input')
let warn = document.createElement('div')
let att = inp.getAttribute('value')
inp.id = 'inpId'
let inpId = document.getElementById('inpId');
inpId.addEventListener("input", ()=>{
if (inpId.value > 3) {
    warn.style.display = 'none';
}
})
warn.classList.add('hi');
warn.innerHTML = 'Тестовая штука';
inp.insertAdjacentElement('afterend', warn);
}
test();
ну и скрипт должен располагаться ниже инпута в потоке html

Худший ответ: Так ты сначала создаёшь элемент, вставляешь его в html, а потом у объекта меняешь атрибут, а то что в html уже там. Нужно либо сначала делать проверку, а потом делать insertAdjacentElement, либо перед скрытием делать querySelector вставленного элемента
Вопрос: Время работы программы с 22 до 5 утра, условие как вывести?

Лучший ответ: (x >= a or x <= b), при x принадлежащий [0;23]

Худший ответ: Возможно вот так?
((x >= a and x <= 24) or (x >= 0 and x <= b))

P.S. исправил условие
Вопрос: Как собрать энергоэффективный и компактный NAS?

Лучший ответ: ОС - OpenMediaVault, это если именно NAS надо.
Впринципе подойдет и Некстклауд, если цеплять его везде по вебдав.
И если Вы осилите все это собрать на голой убунту,вместе с VPN и piHole

естесвенно функции роутера надо будет вынести,  в виртуалку или типа того

етественно собирать на мат плате, правда с учетом её охлада - будет дикий вой
Для трансляции 4k (без перекодирования на лету) подходит любой фактически ЦП

про повербанк (лол) - можете забыть сразу, с учетом 10 дисков)

ну и вопрос - зачем ручка и нахрена этот сервак носить куда то?
И не проще ли просто арендовать VPS...

Худший ответ: Пару лет назад пытался слепить свой NAS. Причем задача не стаяла так масштабно как у вас, просто нужна была домашняя файлпомойка RAID1,но вникая в тему понял проще купить готовый и не парить мозг. В конце концов поступил еще проще и дешевле - раскидал все "важные" файлы по пяти гуглдискам.
Вопрос: Почему возвращает undefined?

Лучший ответ: Я понимаю, что для вас такое поведение выглядит непонятным, но по названию вашего вопроса и тегу javascript легко догадаться о его содержимом не заходя внутрь. Просто потому, что ровно таких вопросов здесь повяляется по три в день.
Прочитайте как работает асинхронность в javascript, про промисы, про async/await.

Худший ответ: Промисифицированный аналог:
function hasBanWords(text) {    
  const url = "banwords.json";

  const xhr = new XMLHttpRequest();    
  xhr.open("GET", url);
  xhr.send();

  return new Promise(resolve => {
    xhr.addEventListener("load", function() {
        if (this.status === 200) {
          const words = JSON.parse(this.response);
          const hasSomeWords = words.some(word => text.includes(word));
          resolve(hasSomeWords);
        }
    });
  });
}

console.log(await hasBanWords("bitch on the beach"));
Вопрос: Есть ряд 1/1+1/2+1/3+1/5+1/7+1/11+1/13+... В общем ряд состоит из единицы деленной на простое число. Вопрос в том сходится ли он и к какому числу?

Лучший ответ: Уходит в бесконечность.

Divergence of the sum of the reciprocals of the primes

Худший ответ: Емнип что-то такое: 
ряд 1/1+1/2+...1/n где н от нуля до бесконечности стремится к бесконечности. Так как в бесконечном ряду целых чисел бесконечное число простых чисел, ряд тоже будет расходиться и стремиться к бесконечности.
Вопрос: Как правильно писать catch в php?

Лучший ответ: Для того чтобы правильно писать catch, надо писать осмысленный код.

А здесь мы наблюдаем очаровательный пример карго-культа.
Узнав, что "толстый контроллер - это плохо, а сервисы - это хорошо", автор небрежным движением руки замел весь мусор под ковёр перенёс весь код из контроллера в "сервис".  Ну а что? Контроллер худой, весь код в сервисе! 
Тот факт, что сама кривая структура проекта осталась, по сути, той же самой, нас не смущает.
Как и то, что сервис вдруг начал выполнять функции НТТР контроллера и кидать почему-то НТТР исключения. Что с этими исключениями делать в случае, если тот же сервис будет вызван из консольной команды - загадка. 

Но самое забавное, что при всём при этом контроллер всё равно пытается выполнять работу модели. Казалось бы, какое отношение интерфейс для обслуживания НТТР запросов имеет к транзакциям в базе данных? А вот поди ж ты!

Чтобы сделать этот код осмысленным, контроллеру всё-таки придется потрудиться, и выполнить какую-то работу самому, а не перекладывать на "сервис".  А так же отдать модели то что ей принадлежит.

В общем транзакцию перекинуть в createDefault. причём не напрямую, а ещё ниже - в слой для работы с БД. Стартовать транзакцию до валидации данных - это как бы *не совсем логично*, мягко говоря. И в итоге, как по волшебству, весь этот говнокод исчезнет как страшный сон.
При этом в параметрах передавать не НТТР реквест чохом, а осмысленный набор параметров, вынутый предварительно из реквеста!
В частности, если модель сама проверяет права доступа, то и передавать ид пользователя из авторизации. 

При этом модель не должна кидать НТТР исключения. Она должна кидать исключения бизнес-логики. Которые контроллер уже может ловить и транслировать в хттп. Но тут видимо уже сложнее, поскольку это ж ларавель судя по всему. 

В любом случае, уж catch (Exception $e)-у тут точно не место

Но это если рассматривать твой конкретный случай. 
В общем же случае правильный код написал Илья.

То есть внутри трая операции с БД и коммит.
в кетче роллбэк и перевыброс исключения. Только ловить надо Throwable

try {
  DB::beginTransaction();
  // запись в БД
  // запись в БД
  // запись в БД
  DB::commit();
} catch (\Throwable $e) {
  DB::rollBack();
  throw $e;
}

Худший ответ: Ну я бы наверное так сделал
DB::beginTransaction();

try {
	$project = $this->projectService->createDefault($request);
	DB::commit();
} catch (Exception $e) {
	DB::rollBack();
	throw $e;
}

UPD: Судя по всему это laravel? можно ещё проще тогда:
DB::transaction(function() use ($request) {
	$project = $this->projectService->createDefault($request);
});
Вопрос: Какой уровень программирования необходим на C++ для sfml?

Лучший ответ: Хватит понимания всех тем, что тут написаны

Худший ответ: Понимать что такое классы и функции будет достаточно для начала изучения
Вопрос: Почему на одних сервисах просят сначала email, а потом пароль, а на других сразу оба?

Лучший ответ: Началось всё с того, что помимо стандартной формы входа на сайт также стали появляться кнопки входа через социальные сети. Например вы зарегистрировались на целевом сайте используя свой аккаунт на твиттере. Затем какое-то время не пользовались целевым сайтом, после чего вернулись и... Вы точно помните что у вас уже есть аккаунт на данном сайте, но вы не помните какой способ входа вы использовали. Перед вами с десяток различных кнопок. Какую из них нажимать? Думаю, история знакомая многим.

Так вот в какой-то момент появилось исследование суть которого в том чтобы изменить форму входа таким образом, чтобы пользователю теперь было достаточно указать только email-адрес, а дальше система сама определит через какой провайдер был зарегистрирован пользователь на сайте с этим email-адресом и в зависимости от этого может либо отобразить пароль для ввода, сделать редирект на сайт провайдера для подтверждения входа или сразу аутентифицировать пользователя на целевом сайте, если пользователь уже авторизован и имеет необходимые разрешения для целевого сайта на сайте-провайдере (например на twitter.com).

Таким образом это ничто иное как улучшение взаимодействия с пользователем. Но как и всё в мире имеет определенные недостатки. Например теперь можно узнать зарегистрирован ли определенный пользователь на определенном сайте зная лишь только его email адрес или номер телефона. То есть страдает конфиденциальность. 

Пример реализации можно увидеть на сайте yandex.ru.

Худший ответ: Email с паролем всегда длиннее, чем просто email или просто пароль. Длинее- лучше, надежнее, безопаснее.
Вопрос: Как вивести елемент из словаря которкый находится в другом файле?

Лучший ответ: Ошибка же всё объясняет: на момент окончания f-строки открытая внутри фигурная скобка не имеет парной закрытой. Всё потому, что в выражениях внутри f-строк надо использовать другие виды кавычек:

f"{some_dict['some_key']}"

или

f'{some_dict["some_key"]}'

или можно так:

f"""{some_dict["some_key"]}"""

Худший ответ: Кавычки, да и имена. Удивительно сколько ты накосячил в одной строке...
Вопрос: Ноутбук не переключается на внешний монитор?

Лучший ответ: Потому что кнопкам тоже нужен "драйвер", вернее родная утилитка. И, видимо, под Кали такого нет. И он берёт монитор по умолчанию. Как вариант - подкинуть рабочую матрицу, донастроить, и работать.
P.S. Попробуй отключить матрицу от ноута физически, что бы ОС видела только один, который внешний.

Худший ответ: Попробовали  ли подождать?
либо другой монитор взять и подключить
Вопрос: Какие еще проекты сделать junior на php помимо дефолтных?

Лучший ответ: Junior разработчиком после выполнения пары проектов в отвратительном качестве не стать.

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


Я могу сделать какой-нибудь обычный crud с sql, но, видимо этого не достаточно.

У Вас не обычный CRUD, а тот который никогда делать не надо. Следует узнать о шаблозаторах Twig и Smarty. Попробовать сделать свою простую шаблонизацию на PHP, что бы отделять верстку о логики. 

Также у меня есть пару книг популярных по этому языку и там тоже нечего взять полезного.
Я думаю, если бы Вы прочитали PHP 7 Котерова, может быть не задавали бы такого вопроса. Можете начать с PHP 7, и обязательно выполнять задания, которые там даны в конце каждой главы. Если хочется быстрее понять PHP можете пройти интенсив. (бонус, что будет опытный наставник и работа с системой контроля версий). 

После того, как будет понимание о языке PHP и его возможностях, следует посмотреть на работу с SQL, создать несколько баз данных руками, попробовать JOIN из нескольких таблиц, написать простой CRUD каталог по архитектуре MVС, что бы понять, как реализуется роутинг.

Поиграться с каким нибудь API, делать получение и отправку запросов. 

Изучать тему Linux и как работать в консоли, настройка LAMP и LEMP окружения. 

Желательно посмотреть на Docker и Vagrant, запустить их у себя на машине и установить внутри какой нибудь обычный WordPress.

Попробовать работу с PHP фреймворками, сделать несколько простых проектов. 

Изучать лучшие практики работы PHP правильный путь

P.S. и постоянно учиться чему то новому...

Худший ответ: Если хочешь быстрее работу найти и коммерческий опыт получить, то бери битрикс. Пару недель с ним посиди, сдай экзамен и думаю быстро устроишься, с твоими знаниями думаю хватит пары недель.
А там, за пол года-год освой ларавел. Как освоишь его на хорошем уровне, так иди на него.
Про ООП посмотри, пару уроков и подучи ответы, чтобы на собесе не лажануть(могут спросить), хотя на битриксе его никто не будет использовать, не переживай, что не знаешь.
https://github.com/bzick/oh-my-backend тут можно про бекенд посмотреть, какие знания нужны.
Так же, хороши уроки Дмитрия Елисеева, там много чего можешь найти полезного для себя, и про ООП, и про фреймворки, и про микрофреймворки. https://deworker.pro/ https://elisdn.ru/
Вопрос: Почему не выполняется рендеринг после обновления данных?

Лучший ответ: Смысла повторяться не вижу, потому что другие уже указали на ваши ошибки. Переписать можно так. И плодить кучу соединений не стоит, достаточно одного. И не забывай отписываться.

Худший ответ: Потому что кусок
var result = {};
  result.price = {};
  result.price.buy = {};
  result.price.sell = {};

  arr.map((res, key) => {
    result.price.buy[res] = {};
    result.price.buy[res].price = "Загрузка...";
  });
  arr.map((res, key) => {
    result.price.sell[res] = {};
    result.price.sell[res].price = "Загрузка...";
  });
У тебя выполняется на каждый вызов функции
У функциональных компонентов нет метода рендер, сама функция выполняется каждый раз когда у тебя поменялся стейт или пропсы.
Вынеси result в стейт (useState) и в ивент листенерах меняй стейт
Вопрос: Как понять значение этой строки?

Лучший ответ: каждая команда после завершения возвращает код возврата.
для if важно не сравнение чего-либо с чем-либо, а именно код возврата команды, который 0 - успех, не ноль - ошибка.
поэтому if [ A == B ] - это не сравнение а выполнение команды[ ]
так и тутif ping - это не сравнение, а выполнение команды pingи получение ее кода возврата

> /dev/null 2> /dev/null 
> - перенаправление вывода stdout в нул
2>перенаправление вывода stderr в нул
Это чтобы на экран команда ничего не выводила - ни основной вывод ни ошибки

p.s. посмотреть код возврата можно через переменную $?
ping -c 1 google.com
echo $?

ping -c 1 google.com1
echo $?

Худший ответ: ">" "2>" это перенаправление потока вывода и потока ошибок исполнения ping в /dev/null, т.е его выводы нам не интересны. https://habr.com/ru/post/55136/

в условии if %программа% проверяется переменная ERRORLEVEL, не нулевое значение которой считается за ошибку.
соответственно данное условие будет правильным при выдаче програмкой ERRORLEVEL=0.

ping -c 2, сколь помню, выдает ERRORLEVEL=0 если оба пакета нормально прошли туда-обратно.
Вопрос: Что использовали для разработки данных сайтов?

Лучший ответ: Single-page application

Делается на любом современном фреймворке (Svelte, Angular, Vue), или без них вовсе, с любой библиотекой для клиентского роутинга

Худший ответ: Single-page application

Делается на любом современном фреймворке (Svelte, Angular, Vue), или без них вовсе, с любой библиотекой для клиентского роутинга
Вопрос: Поставил ubuntu рядом с Windows. Как записывать файлы с Ubuntu на Диск D?

Лучший ответ: P. S. S. загрузился с винды. Потом загрузился снова с убунты и все заработало. Хз как это работаетОчень просто, ntfs-3g (или какой там в убунту используется драйвер для доступа к NTFS) не монтирует том NTFS на запись, если он помечен как "грязный". Это сделано во избежание возможного повреждения данных на томе, т.к. файловая система NTFS проприетарна и не документирована официально. А "грязным" том помечается в том случае, если завершение работы системы было неожиданным. Потому загрузка в Windows (и, возможно, последующее выполнение chkdsk, если система этого требует при запуске) решает эту проблему.

Худший ответ: И доп. вопрос можно ли как-то сделать чтобы ubuntu автоматически находила диск д

да, прописать его во /etc/fstab и он будет автоматически монтироваться

загрузился с винды. Потом загрузился снова с убунты и все заработало

Зависит от того как выключена была винда.
Вопрос: Какие существуют бесплатные базы данных?

Лучший ответ: Для заметок база данных не нужна.  

Я использую git для заметок и когда надо синхронизировать десктоп и ноутбук - делаю соотв pull/push.

Всё что бесплатное - либо действует 30-60 дней пробного периода. Кроме того никак не помогает вам в решение технических issues. Бесплатный пользователь облаков - это бета-тестер. Не обижайтесь если внезапно версия обновиться без вашего ведома. Чтоб не было сюрпризов вобщем.

Худший ответ: Есть специализированное ПО для заметок. Можно выбрать по описанию, например, из этой статьи.
Вопрос: Как найти английские фамилии в тексте?

Лучший ответ: pymorphy2 это лексический анализатор русского языка.
используй NLTK, spacy

p.s. с именами/фамилиями в английском тексте беда полная - любое имя может быть фамилией

Худший ответ: Обрабатывай наоборот тогда. То есть если тебе возвращается True, ты возвращай False и наоборот.