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

Боље раздвајање речи / токенизација #38

Open
turanjanin opened this issue Sep 14, 2021 · 3 comments
Open
Labels
enhancement New feature or request

Comments

@turanjanin
Copy link
Owner

Тренутно је издвајање појединачних речи решено прилично једноставно, регуларним изразом који раздваја сваки пут када наиђе на бланко карактер - let words = text.split(/(\s+)/);. Овај регуларни израз би требало побољшати тако да одваја и интерпункцијске знаке које су залепљене уз реч:

  • (заграда)
  • ”Наводници”
  • запете,
  • итд.

Тривијално решење let words = text.split(/([\s\.,;"]+)/); није довољно добро зато што прави проблем уколико се у тексту налази URL, па се, самим тим www.domen.rs/neka/putanja, ломи у више речи, што треба избегнути.

На овај начин бисмо могли и да избегнемо позивање функције trimExcessiveCharacters() код сваке издвојене речи, што би убрзало перформансе.

@turanjanin turanjanin added the enhancement New feature or request label Sep 14, 2021
@bkaradzic
Copy link
Contributor

Тривијално решење let words = text.split(/([\s.,;"]+)/); није довољно добро зато што прави проблем уколико се у тексту налази URL, па се, самим тим www.domen.rs/neka/putanja, ломи у више речи, што треба избегнути.

Потенцијално решење би могло да буде да се препознају имејл адресе, URL, и сл. па да се тек онда ради раздвајање...

@turanjanin
Copy link
Owner Author

Имаш ли идеју како би то могло да се уради?

Мени је више пало на памет да се дода нека поједностављена верзија регуларног израза који се користи овде: https://github.com/clarinsi/reldi-tokeniser/blob/master/reldi_tokeniser/tokeniser.py#L58. Само треба осмислити начин како да упоредимо перформансе, да не жртвујемо брзину зарад мало бољег квалитета.

@bkaradzic
Copy link
Contributor

Имаш ли идеју како би то могло да се уради?

Имам решење али у Го језику...

Имејл:
https://github.com/bkaradzic/go-emailvalidator/blob/dbb5722e34635981fc5b59c8adf7e1d75b1615ad/email.go#L521-L576

Ово је УРЛ:

import (
	"regexp"
)

var (
	urlRe = regexp.MustCompile(`([A-Za-z]+)://[-A-Za-z0-9+&@#\/%?=~_|!:,.;\(\)]+`)
)

func IsUrl(word string) bool {
	return urlRe.MatchString(word)
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants