Skip to content

Commit 3f59aed

Browse files
authored
Merge pull request #21 from zoho/hawking_dev
Day hour start/end configuration, Parser Enhancement and Bug fixes
2 parents 49de65e + a5c29e2 commit 3f59aed

File tree

6 files changed

+68
-3
lines changed

6 files changed

+68
-3
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
<groupId>com.zoho</groupId>
66
<artifactId>hawking</artifactId>
7-
<version>0.1.3</version>
7+
<version>0.1.4</version>
88
<packaging>jar</packaging>
99
<name>Hawking</name>
1010
<description>Hawking is a natural language date time parser that extracts date and time from text with context and parse to the required format.</description>

src/main/java/com/zoho/hawking/HawkingTimeParser.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ public DatesFound parse(String inputSentence, Date referenceDate, HawkingConfigu
4343
parserOutputs.add(date.getParserOutput());
4444
dateGroups.add(date.getDateGroup());
4545
}
46+
parserOutputs = DateTimeProperties.addDefaultTime(parserOutputs, config.getDayhourStart(), config.getDayhourEnd());
4647
datesFound.setParserOutputs(parserOutputs);
4748
datesFound.setDateGroups(dateGroups);
4849
LOGGER.info(datesFound.toString());

src/main/java/com/zoho/hawking/datetimeparser/components/WeekParser.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,7 @@ public void present() {
190190
endDaysIncrement = ConfigurationConstants.getConfiguration().getWeekDayAndEnd().getWeekDayDiff();
191191
DateTimeManipulation.setWeekStartAndEndTime(dateAndTime, startWeekIncrement, 0, 0, endDaysIncrement, 1, 2);
192192
} else if (super.abstractLanguage.weekendWords.contains(timeSpan)) {
193+
193194
dateAndTime.setDateAndTime(DateTimeManipulation.addWeeks(dateAndTime.getDateAndTime(), number, 0).
194195
dayOfWeek().setCopy(ConfigurationConstants.getConfiguration().getWeekDayAndEnd().getWeekEndStart()));
195196
startWeekIncrement = number != 0 ? (number - 1) : 0;
@@ -292,7 +293,9 @@ void extractComponentsTags() {
292293
@Override
293294
void computeNumber() {
294295
if (!isNumberPresent) {
295-
if (super.abstractLanguage.weekdayWords.contains(timeSpan) ||
296+
if(this.tenseIndicator.equals("") && this.implicitPrefix.equals("") && super.abstractLanguage.weekendWords.contains(timeSpan)){
297+
number = 0;
298+
} else if (super.abstractLanguage.weekdayWords.contains(timeSpan) ||
296299
super.abstractLanguage.weekendWords.contains(timeSpan) ||
297300
super.abstractLanguage.weekWords.contains(timeSpan)) {
298301
number = ConfigurationConstants.getConfiguration().getRangeDefault().getWeek();

src/main/java/com/zoho/hawking/datetimeparser/configuration/HawkingConfiguration.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ public class HawkingConfiguration {
3030
private int minuteSpan = 0;
3131
private int secondSpan = 1;
3232

33+
private int dayhourStart = 0;
34+
private int dayhourEnd = 24;
35+
3336
private int weekDayStart = DateTimeConstants.MONDAY;
3437
private int weekDayEnd = DateTimeConstants.FRIDAY;
3538

@@ -607,8 +610,37 @@ public String getTimeZone() {
607610
* @param timeZone represent whether to set timezone to referenceDate
608611
* IST, PST, CST
609612
*/
613+
610614
public void setTimeZone(String timeZone) {
611615
this.timeZone = timeZone;
612616
}
613617

618+
/**
619+
* @return the dayhourStart
620+
* */
621+
622+
public int getDayhourStart() { return dayhourStart; }
623+
624+
/**
625+
* @param dayhourStart represent start of the day hour
626+
* range 0-23 , dayhourStart should always less than dayhourEnd
627+
* 0 - 12 AM, 1 - 1 AM, 14 - 2 PM
628+
*/
629+
630+
public void setDayhourStart(int dayhourStart) { this.dayhourStart = dayhourStart; }
631+
632+
/**
633+
* @return the dayhourEnd
634+
*/
635+
636+
public int getDayhourEnd() { return dayhourEnd; }
637+
638+
/**
639+
* @param dayhourEnd represent end of the day hour
640+
* range 1-24 , dayhourEnd should always greater than dayhourStart
641+
* 17 - 5 PM, 20 - 8 PM, 22 - 10 PM
642+
*/
643+
644+
public void setDayhourEnd(int dayhourEnd) { this.dayhourEnd = dayhourEnd; }
645+
614646
}

src/main/java/com/zoho/hawking/utils/DateTimeProperties.java

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ private String removeTimeZone(String parsedText) {
191191
returnText = returnText.replaceAll("Year", "year"); //No I18N
192192
returnText = returnText.replaceAll("\\b(?i)" + "final", "last"); //No I18N
193193
returnText = returnText.replaceAll("\\.$", " ").trim(); //No I18N
194-
String test = returnText.replaceAll("^(and |or |to )?\\d*$",""); //No I18N
194+
String test = returnText.replaceAll("^(and |or |to )?([1-9][0-9]{0,2}|1000)$",""); //No I18N
195195
returnText = returnText.replaceAll("^- ", " "); //No I18N
196196
returnText = returnText.replaceAll("post", "after"); //No I18N
197197
returnText = returnText.replaceAll("breakfast", "8 AM"); //No I18N
@@ -267,4 +267,33 @@ public static DatesFound emptyDatesRemover(DatesFound dates) {
267267
date.setParserOutputs(parserOutput);
268268
return date;
269269
}
270+
271+
public static List<ParserOutput> addDefaultTime(List<ParserOutput> parserOutputs, int dayhourStart, int dayhourEnd) {
272+
List<ParserOutput> parserOutputsreturn = new ArrayList<>();
273+
if(!(dayhourStart == 0 && dayhourEnd == 24)){
274+
for (ParserOutput parserOutput : parserOutputs) {
275+
DateTime start = parserOutput.getDateRange().getStart();
276+
DateTime end = parserOutput.getDateRange().getEnd();
277+
String recogizerLabel = "";
278+
for (RecognizerOutput recognizerOutput : parserOutput.getRecognizerOutputs()) {
279+
recogizerLabel += " " + recognizerOutput.getRecognizerLabel();
280+
}
281+
if (!(parserOutput.getIsExactTimePresent()) && !recogizerLabel.contains("part_of_day")) {
282+
if (start != null && end != null) {
283+
parserOutput.getDateRange().setStart(start.plusHours(dayhourStart));
284+
parserOutput.getDateRange().setEnd(start.plusHours(dayhourEnd).minusSeconds(1));
285+
} else if (start != null) {
286+
parserOutput.getDateRange().setStart(start.plusHours(dayhourStart));
287+
} else if (end != null) {
288+
parserOutput.getDateRange().setEnd(end.minusHours((end.getHourOfDay()-dayhourEnd)+1));
289+
}
290+
}
291+
parserOutputsreturn.add(parserOutput);
292+
}
293+
return parserOutputsreturn;
294+
}
295+
else {
296+
return parserOutputs;
297+
}
298+
}
270299
}
1.65 KB
Binary file not shown.

0 commit comments

Comments
 (0)