Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support parsing base-forms parts of a compound word #2

Merged
merged 2 commits into from Jan 26, 2023

Conversation

mortterna
Copy link
Member

No description provided.

Copy link
Member

@komu komu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Muiden kommenttien lisäksi testit olisivat vielä kova juttu.

@@ -209,6 +213,14 @@ public void setRequireFollowingVerb(@Nullable String requireFollowingVerb) {
this.requireFollowingVerb = requireFollowingVerb;
}

public void setBaseFormParts(@NotNull List<String> baseFormParts) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tämä voisi varmaan olla konsistentisti @Nullable vaikkei sitä koskaan null-arvoilla kutsuttaisikaan.

*/
default @NotNull List<Analysis> analyze(@NotNull CharSequence word, @NotNull AnalyzerConfiguration configuration) {
return analyze(word, Integer.MAX_VALUE, configuration);
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mä ehkä haluaisin sitä että konfiguraatio annettaisiin parametriksi siinä vaiheessa kun analyzer buildataan. Juuri tällä hetkellä konfiguraatiossa ei toki ole mitään sellaista mikä ei voisi olla jo nyt, mutta jos myöhemmin haluttaisiin laajentaa sitä sisältämään vaikka bufferien kokoja tms. niin ei ole kivaa että jouduttaisiin tekemään erillinen konfiguraatioluokka. Muutenkin tuntuu API-mielemmässä selkeämmältä että ensin luodaan konfiguraatiolla sopivanlainen analysaattori ja sitten käytetään sitä.


package fi.evident.raudikko;

public class AnalyzerConfiguration {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

final tähän. Lisäksi voisi mainita pari sanaa siitä että on undefined mennä muuttamaan konfiguraatiota sen jälkeen kun sen on antanut analysaattorille.

@@ -165,6 +168,18 @@ else if (!classTagSeen && tag.matches(Tags.lu)) {
return baseform.toString();
}

static @NotNull List<String> parseBaseFormParts(@NotNull SymbolBuffer tokenizer) {
List<String> parts = new ArrayList<>(4);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oletuskapasiteetti on 10, joten parhaassa tapauksessa säästetään (10-4)*8=48 byten allokointi tietorakenteesta joka jää hyvin todennäköisesti väliaikaiseksi ja heitetään pian menemään. Huonoimmassa tapauksessa aiheuttaa toisen allokaation.

Jos tässä näkee jonkun initial-sizen, niin olisi kiva nähdä joku benchmark, jonka mukaan sillä on mitään vaikutusta. Mutta tottahan sekin on, että eihän oikeassa tekstissä mitään lentokonesuihkuturbiinimoottoriapumekaanikkoaliupseerioppilaita tule vastaan. Että ihan miten vain. 😄

this.includeFstOutput = includeFstOutput;
}

public static AnalyzerConfiguration all() {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can has @NotNull?

Makustelin tälle myös nimeä full, mutta en ole varma kumpi on parempi.

Sitten mietin että jos nyt on vaihtoehtona staattinen factory metodi tai constructor ja molemmat tekevät saman asian, mutta constructorin toimintaa ei ole dokumentoitu, niin ehkä sen pitäisi olla private?

Sitten pohdin vielä sitäkin että onko all/full nimi mihin halutaan sitoutua tulevaisuudessa. Mitäpä jos joskus tuleekin joku super-raskas uusi analyysi eikä haluta ylläreitä olemassaoleville käyttäjille niin että ne saavat sen automaattisesti mukaan kun päivittävät uuteen versioon.

Eli ehkä sittenkin joku default tms? Mutta olisiko sitten kuitenkin ihan vain se default-constructor? Luokan javadocissa voisi mainita että oletuksena saa sellaiset "järkevät default-asetukset, jotka sisältävät suurimman osan analyyseistä" tms

@@ -65,6 +66,9 @@ public final class Analysis implements Cloneable {
private boolean possibleGeographicalName = false;
private @Nullable String requireFollowingVerb;

// Data extended in comparison to original libvoikko implementation
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ei tätä varmaan tarvitse erikseen mainita.

@@ -277,6 +289,7 @@ public String toString() {
", malagaVapaaJalkiosa=" + malagaVapaaJalkiosa +
", possibleGeographicalName=" + possibleGeographicalName +
", requireFollowingVerb='" + requireFollowingVerb + '\'' +
", baseFormParts='" + (baseFormParts != null ? String.join(", ", baseFormParts) : null) + '\'' +
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Listan toString on itsessään mainio, joten tää voi olla vain:

Suggested change
", baseFormParts='" + (baseFormParts != null ? String.join(", ", baseFormParts) : null) + '\'' +
", baseFormParts='" + baseFormParts + '\'' +

configuration.setIncludeBaseForm(true);
configuration.setIncludeBasicAttributes(false);
configuration.setIncludeOrganizationNameAnalysis(false);
configuration.setIncludeFstOutput(false);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nyt kun lisätään uusia analyysejä, pitää muistaa päivittää tätä. Ehkä tässä voisi olla:

AnalyzerConfiguration configuration = AnalyzerConfiguration.none();
configuration.setIncludeBaseForm(true);

tai jopa:

AnalyzerConfiguration configuration = AnalyzerConfiguration.onlyBaseForm();

Mutta jos nyt lähdetään siitä että konfiguraatio on annettu jo analyzeria luodessa ja se voisi potentiaalisesti sisältää ihan muitakin asetuksia kuin ne mitä nykyään on, niin eihän me voida ylipäätään vain luoda konfiguraatiota tyhjästä, koska se ei välttämättä ole lainkaan sitä käyttäjä haluaa.

Joka tapauksessa tämä metodi on sellainen joka oikeassa implementaatiossa on overridettu tehokkaammalla, joten pidetään tämä ennallaan: kutsutaan vain analyze-metodia normaalisti ja keräillään sieltä baseformit talteen luottaen että käyttäjä on antanut konfiguraation, jossa baseformit halutaan.

@komu komu merged commit 91cba22 into main Jan 26, 2023
@komu komu deleted the feature/base-form-parts branch January 26, 2023 13:22
@komu komu changed the title Feature/base form parts Support parsing base-forms parts of a compound word Jan 31, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants