Я пытаюсь подсчитать количество предложений в тексте с помощью регулярного выражения. Я пришел с regex1 найти все точки:Подсчитайте количество предложений, используя REGEX и игнорируя аббревиатуры
([^.!?\s][^.!?]*)
После этого я попытался найти большинство аббревиатур следующего regex2:
([A-Z]+[a-z]{0,3}\.).
Однако у меня есть несколько проблем:
Если акроним находится в конце предложения, он найден (например, с 20 000 до н.э.) по формуле regex2. Это не предназначено, я только хочу найти аббревиатуры в предложении.
Если мы предположим, что проблема 1 решена, я хочу объединить обе формулы регулярных выражений вместе, чтобы окончательная формула выводила только действительное количество предложений. Как, например, мы можем рассмотреть следующий текст из Википедии:
Национальное управление по аэронавтике и исследованию космического пространства (НАСА) является правительственным учреждением Соединенных государства, ответственное за гражданскую космическую программу как также аэронавтики и космонавтики исследование.
президент Дуайт Эйзенхауэр создал Национальное управление по аэронавтике и исследованию космического пространства администрации (НАСА) в 1958 году [5] с отчетливо гражданского (а не военных) ориентации поощряет мирных применений в области космической науки. Закон о национальной аэронавтике и космосе был принят 29 июля 1958 года, отменив предшественника НАСА, Национальный консультативный комитет по аэронавтике (NACA) Национального комитета по аэронавтике и космосу. Новое агентство стало , действующее 1 октября 1958 года. [6] [7]
С того времени большинство усилий США N исследования космоса, были во главе с НАСА, в том числе посадка на Луну Аполлоном, пространство станции Skylab, а позже Space Shuttle. В настоящее время НАСА поддерживает Международную космическую станцию и осуществляет надзор за разработкой многоцелевого транспортного средства Orion, системы космического запуска и Коммерческие транспортные средства. Агентство также несет ответственность за Программу запуска программ (LSP) , которая обеспечивает контроль за запуском операций и обратного отсчета для запуска беспилотных запусков NASA.
НАСА наука ориентирована на лучшее понимании Земли через системы наблюдения Земли, [8] опережение гелиофизики усилий из программы исследований Гелиофизики Научной Миссии директората, [9] исследующих тел по всем Солнечной системе с прогрессирующим Robotic миссий космических кораблей, таких как New Horizons, [10] и исследования тем астрофизики, таких как Большой взрыв, через Великие Обсерватории и связанные с ними программы. [11] NASA делится данными с различными национальными и международными организациями, такими как от наблюдательного спутника наблюдения за парниковыми газами .
Вышеупомянутый текст содержит 9 предложений.
Regex1: 12 совпадений (D., U.И С. рассматриваются как «полные остановки»)
Regex2: 3 матча (D., U., и S.)
Что мне нужно сейчас лучше regex1 формула только найти аббревиатуры в и затем «объединить» формулы регулярного выражения для получения всех предложений.
Если слияние обеих формул не представляется возможным (по какой-либо уважительной причины), то рассматривать только задачу 1, потому что в данный момент моя программа JAVA использовать обе формулы разделенным:
public void breakIntoSentences()
{
//Find all points
Pattern p = Pattern.compile("([^.!?\\s][^.!?]*)");
Matcher m = p.matcher(content);
int allPoints = 0;
while(m.find())
allPoints++;
//Find all acronyms with length 0-4
p = Pattern.compile("([A-Z]+[a-z]{0,3}\\.)");
m = p.matcher(content);
int allAcronyms = 0;
while(m.find())
allAcronyms++;
numberOfSentences = allPoints - allAcronyms;
}
Спасибо заранее за помощь
Вы хотите только слова, не так ли? Как насчет '\ w + ([^ \ W \ d])'? http://regexr.com/3ar0d Используя PatternMatcher, вы можете подсчитать, сколько у вас есть. – deadfish
Нет, цель состоит в том, чтобы извлечь предложения из того, что я прочитал. Чтобы подсчитать предложения, он хочет извлечь их в группы, а затем подсчитать их. – Eric