Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
هنگام کار کردن با کلاس WordTokenizer به شکل زیر:
چند مشکل مشاهده کردم که تعدادی از آنها مربوط به قرار داشتن توکنهای عددی و id در ابتدا یا انتهای رشته بودند که regex های مربوط به آنها نمیتوانستند این توکنها را تشخیص دهند. همچنین عددهای اعشاری و قسمت انتهایی ایمیل به عنوان لینک تشخیص داده میشود و در برخی موارد لینک هم به طور کامل جایگزین نمیشود. برای بررسی این مشکلها تست کیسهای زیر را بررسی کردم:
برای مشاهده کلیک کنید
که برای کد کنونی این خروجی را ایجاد میکند:
برای حل مشکل قرار داشتن توکن در ابتدا یا انتهای رشته من به جای قاعده
([^\w\._]+)
از lookahead منفی(?<![\w\._])
استفاده کردم. برای حل مشکل ایمیل هم مکان جایگزین کردن ایمیل را به قبل لینک بردم تا زودتر جایگزین شود. قاعده regex آدرس URL را هم کمی تغییر دادم که کاراکترهای ? . & را هم شامل شود. به دلیل این که در نام دامنه، بخش top-level domain نمیتواند شامل یک عدد باشد، من در regex آدرس URL بخش انتهای دامنه را طوری قرار دادم که حاوی عدد نباشد و این گونه مشکل تشخیص لینک به جای عدد حل میشود. علاوه بر این کاراکترهای جداساز اعشاری (٫) و جداسار هزارگان (٬) را هم اضافه کردم تا بتوانند جزیی از عدد تشخیص داده شوند.با ایجاد این تغییرات، برای تست کیسهای گفته شده در بالا خروجی زیر ایجاد میشود:
البته مشکل دیگری که همچنان وجود دارد، تشخیص رشتههایی است که درست فاصلهگذاری نشدهاند، مانند "است.اما"، که به عنوان لینک شناخته میشوند؛ به این دلیل که قاعده
\w
کاراکترهای الفبای فارسی را هم شامل میشود. از طرف دیگر، دامنههای جدیدی که دارای پسوند غیر لاتین هستند مانند دامنههای ".ایران" هم وجود دارند که برای انها لازم است از\w
استفاده شود. برای همین مطمئن نبودم که باید این قسمت را تغییر دهم یا نه.از طرف دیگر این قاعده لینکهای با آدرس آیپی مانند 192.168.1.1 و آدرسهای رزرو شده مانند localhost را هم تشخیص نمیدهد؛ اما با توجه به این که این آدرسها به ندرت در متن استفاده میشوند و پشتیبانی از آنها regex را پیچیده میکند، به نظرم میتوان از این موارد صرف نظر کرد.
علاوه بر این، تغییرات ایجاد شده را روی چند متن ویکیپدیا امتحان کردم و بجز مورد بالا مشکل خاص دیگری پیدا نکردم.