2013-02-12 7 views
0

Я использую Java, чтобы попытаться разобрать файл. Я ищу людей в документе. Вот примеры, которые я видел до сих пор:regex java parsing

49-летние

31 лет

, 26,

, 45,

30s,

последние тридцатые годы,

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

+1

Возможно, вы используете неправильный инструмент для выполнения этой задачи. Каков ваш успех с указанными выше регулярными выражениями? Я бы предположил, что ', 26,' даст много ложных срабатываний, а также –

+0

Вам нужно проверить пакеты обработки естественного языка. Только Regex может дать вам только кучу случайных чисел. – nhahtdh

ответ

0

Я нашел ответ на свой вопрос от своего друга CS в Стэнфорде.

Зачем вручную определять все коды регулярных выражений, когда вы можете получить его сгенерированный для вас?

http://txt2re.com/index-java.php3

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

Инструмент избил все остальное, что я нашел о регулярном выражении.

0

Я бы не пошел с регулярным выражением в этом случае, в этом случае. Я предпочел бы построить функцию, которая будет сканировать через вход. Я полагаю, что это будет более надежным. Regex, иногда может быть немного грязным.

+0

Как мне обрабатывать номера? Скажем, возраст может быть от 20 до 100? Будет ли у меня цикл, который проверяет каждый возраст и формулировку возрастов? Должен быть лучший способ. – user2044299

+0

Все зависит от того, насколько вы продвинуты в Java. Что вы можете сделать, это проверить, какой тип данных вводил пользователь. Затем вы можете определить собственную функцию регулярного выражения для этих конкретных типов данных. Но даже тогда было бы лучше создать какой-то механизм сравнения. Вам действительно не нужно использовать цикл, то, что я бы сделал, это список или вектор, я считаю, что у них есть функция, называемая «содержит», или что-то подобное, что вам нужно сделать, это передать вход пользователя в вектор, содержащий все возможные возрасты.Надеюсь, это поможет, если вы хотите, чтобы какой-нибудь образец кода дал мне знать. –

0

Для всех примеров входов кроме последний, это просто извлечь возраст, используя что-то вроде ниже схеме:

Pattern pattern = Pattern.compile("[^\\d]*(\\d+)[^\\d]*"); 
Matcher matcher = pattern.matcher("30s"); // 49-years-old, 31 years old 
if (matcher.matches()) { 
    System.out.println(matcher.group(1)); 
} 

Но когда возраст написан на словах, не просто решение и, возможно, ваш шаблон (или любой алгоритм, который вы сделаете, чтобы извлечь это); должен эволюционировать со временем, потому что люди могли бы вносить свой возраст в разные стили, которые вам нужно разместить.