mirror of
https://github.com/explosion/spaCy.git
synced 2024-12-25 17:36:30 +03:00
Malay language support (#12602)
* add malay lang * fix token len * black format * reformat conftest malay * remove exceptions not exist in dbp * format code
This commit is contained in:
parent
58779c24ef
commit
873c16a4df
24
spacy/lang/ms/__init__.py
Normal file
24
spacy/lang/ms/__init__.py
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
from .stop_words import STOP_WORDS
|
||||||
|
from .punctuation import TOKENIZER_SUFFIXES, TOKENIZER_PREFIXES, TOKENIZER_INFIXES
|
||||||
|
from .tokenizer_exceptions import TOKENIZER_EXCEPTIONS
|
||||||
|
from .lex_attrs import LEX_ATTRS
|
||||||
|
from .syntax_iterators import SYNTAX_ITERATORS
|
||||||
|
from ...language import Language, BaseDefaults
|
||||||
|
|
||||||
|
|
||||||
|
class MalayDefaults(BaseDefaults):
|
||||||
|
tokenizer_exceptions = TOKENIZER_EXCEPTIONS
|
||||||
|
prefixes = TOKENIZER_PREFIXES
|
||||||
|
suffixes = TOKENIZER_SUFFIXES
|
||||||
|
infixes = TOKENIZER_INFIXES
|
||||||
|
syntax_iterators = SYNTAX_ITERATORS
|
||||||
|
lex_attr_getters = LEX_ATTRS
|
||||||
|
stop_words = STOP_WORDS
|
||||||
|
|
||||||
|
|
||||||
|
class Malay(Language):
|
||||||
|
lang = "ms"
|
||||||
|
Defaults = MalayDefaults
|
||||||
|
|
||||||
|
|
||||||
|
__all__ = ["Malay"]
|
1943
spacy/lang/ms/_tokenizer_exceptions_list.py
Normal file
1943
spacy/lang/ms/_tokenizer_exceptions_list.py
Normal file
File diff suppressed because it is too large
Load Diff
17
spacy/lang/ms/examples.py
Normal file
17
spacy/lang/ms/examples.py
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
"""
|
||||||
|
Example sentences to test spaCy and its language models.
|
||||||
|
|
||||||
|
>>> from spacy.lang.ms.examples import sentences
|
||||||
|
>>> docs = nlp.pipe(sentences)
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
sentences = [
|
||||||
|
"Malaysia ialah sebuah negara yang terletak di Asia Tenggara.",
|
||||||
|
"Berapa banyak pelajar yang akan menghadiri majlis perpisahan sekolah?",
|
||||||
|
"Pengeluaran makanan berasal dari beberapa lokasi termasuk Cameron Highlands, Johor Bahru, dan Kuching.",
|
||||||
|
"Syarikat XYZ telah menghasilkan 20,000 unit produk baharu dalam setahun terakhir",
|
||||||
|
"Kuala Lumpur merupakan ibu negara Malaysia." "Kau berada di mana semalam?",
|
||||||
|
"Siapa yang akan memimpin projek itu?",
|
||||||
|
"Siapa perdana menteri Malaysia sekarang?",
|
||||||
|
]
|
66
spacy/lang/ms/lex_attrs.py
Normal file
66
spacy/lang/ms/lex_attrs.py
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
import unicodedata
|
||||||
|
|
||||||
|
from .punctuation import LIST_CURRENCY
|
||||||
|
from ...attrs import IS_CURRENCY, LIKE_NUM
|
||||||
|
|
||||||
|
|
||||||
|
_num_words = [
|
||||||
|
"kosong",
|
||||||
|
"satu",
|
||||||
|
"dua",
|
||||||
|
"tiga",
|
||||||
|
"empat",
|
||||||
|
"lima",
|
||||||
|
"enam",
|
||||||
|
"tujuh",
|
||||||
|
"lapan",
|
||||||
|
"sembilan",
|
||||||
|
"sepuluh",
|
||||||
|
"sebelas",
|
||||||
|
"belas",
|
||||||
|
"puluh",
|
||||||
|
"ratus",
|
||||||
|
"ribu",
|
||||||
|
"juta",
|
||||||
|
"billion",
|
||||||
|
"trillion",
|
||||||
|
"kuadrilion",
|
||||||
|
"kuintilion",
|
||||||
|
"sekstilion",
|
||||||
|
"septilion",
|
||||||
|
"oktilion",
|
||||||
|
"nonilion",
|
||||||
|
"desilion",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def like_num(text):
|
||||||
|
if text.startswith(("+", "-", "±", "~")):
|
||||||
|
text = text[1:]
|
||||||
|
text = text.replace(",", "").replace(".", "")
|
||||||
|
if text.isdigit():
|
||||||
|
return True
|
||||||
|
if text.count("/") == 1:
|
||||||
|
num, denom = text.split("/")
|
||||||
|
if num.isdigit() and denom.isdigit():
|
||||||
|
return True
|
||||||
|
if text.lower() in _num_words:
|
||||||
|
return True
|
||||||
|
if text.count("-") == 1:
|
||||||
|
_, num = text.split("-")
|
||||||
|
if num.isdigit() or num in _num_words:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def is_currency(text):
|
||||||
|
if text in LIST_CURRENCY:
|
||||||
|
return True
|
||||||
|
|
||||||
|
for char in text:
|
||||||
|
if unicodedata.category(char) != "Sc":
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
LEX_ATTRS = {IS_CURRENCY: is_currency, LIKE_NUM: like_num}
|
61
spacy/lang/ms/punctuation.py
Normal file
61
spacy/lang/ms/punctuation.py
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
from ..punctuation import TOKENIZER_PREFIXES, TOKENIZER_SUFFIXES, TOKENIZER_INFIXES
|
||||||
|
from ..char_classes import ALPHA, merge_chars, split_chars, _currency, _units
|
||||||
|
|
||||||
|
|
||||||
|
_units = (
|
||||||
|
_units + "s bit Gbps Mbps mbps Kbps kbps ƒ ppi px "
|
||||||
|
"Hz kHz MHz GHz mAh "
|
||||||
|
"ratus rb ribu ribuan "
|
||||||
|
"juta jt jutaan mill?iar million bil[l]?iun bilyun billion "
|
||||||
|
)
|
||||||
|
_currency = _currency + r" USD RM MYR Rp IDR RMB SGD S\$"
|
||||||
|
_months = (
|
||||||
|
"Januari Februari Mac April Mei Jun Julai Ogos September "
|
||||||
|
"Oktober November Disember Januari Februari Mac Mei Jun "
|
||||||
|
"Julai Ogos Oktober Disember Jan Feb Mac Jun Julai Ogos Sept "
|
||||||
|
"Okt Nov Dis"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
UNITS = merge_chars(_units)
|
||||||
|
CURRENCY = merge_chars(_currency)
|
||||||
|
HTML_PREFIX = r"<(b|strong|i|em|p|span|div|br)\s?/>|<a([^>]+)>"
|
||||||
|
HTML_SUFFIX = r"</(b|strong|i|em|p|span|div|a)>"
|
||||||
|
MONTHS = merge_chars(_months)
|
||||||
|
LIST_CURRENCY = split_chars(_currency)
|
||||||
|
|
||||||
|
_prefixes = list(TOKENIZER_PREFIXES)
|
||||||
|
_prefixes.remove("#") # hashtag
|
||||||
|
_prefixes = _prefixes + LIST_CURRENCY + [HTML_PREFIX] + ["/", "—"]
|
||||||
|
|
||||||
|
_suffixes = (
|
||||||
|
TOKENIZER_SUFFIXES
|
||||||
|
+ [r"\-[Nn]ya", "-[KkMm]u", "[—-]"]
|
||||||
|
+ [
|
||||||
|
# disabled: variable width currency variable
|
||||||
|
# r"(?<={c})(?:[0-9]+)".format(c=CURRENCY),
|
||||||
|
r"(?<=[0-9])(?:{u})".format(u=UNITS),
|
||||||
|
r"(?<=[0-9])%",
|
||||||
|
# disabled: variable width HTML_SUFFIX variable
|
||||||
|
# r"(?<=[0-9{a}]{h})(?:[\.,:-])".format(a=ALPHA, h=HTML_SUFFIX),
|
||||||
|
r"(?<=[0-9{a}])(?:{h})".format(a=ALPHA, h=HTML_SUFFIX),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
_infixes = TOKENIZER_INFIXES + [
|
||||||
|
r"(?<=[0-9])[\\/](?=[0-9%-])",
|
||||||
|
r"(?<=[0-9])%(?=[{a}0-9/])".format(a=ALPHA),
|
||||||
|
# disabled: variable width units variable
|
||||||
|
# r"(?<={u})[\/-](?=[0-9])".format(u=UNITS),
|
||||||
|
# disabled: variable width months variable
|
||||||
|
# r"(?<={m})[\/-](?=[0-9])".format(m=MONTHS),
|
||||||
|
r'(?<=[0-9)][.,])"(?=[0-9])',
|
||||||
|
r'(?<=[{a})][.,\'])["—](?=[{a}])'.format(a=ALPHA),
|
||||||
|
r"(?<=[{a}])-(?=[0-9])".format(a=ALPHA),
|
||||||
|
r"(?<=[0-9])-(?=[{a}])".format(a=ALPHA),
|
||||||
|
r"(?<=[{a}])[\/-](?={c}|[{a}])".format(a=ALPHA, c=CURRENCY),
|
||||||
|
]
|
||||||
|
|
||||||
|
TOKENIZER_PREFIXES = _prefixes
|
||||||
|
TOKENIZER_SUFFIXES = _suffixes
|
||||||
|
TOKENIZER_INFIXES = _infixes
|
118
spacy/lang/ms/stop_words.py
Normal file
118
spacy/lang/ms/stop_words.py
Normal file
|
@ -0,0 +1,118 @@
|
||||||
|
STOP_WORDS = set(
|
||||||
|
"""
|
||||||
|
ada adalah adanya adapun agak agaknya agar akan akankah akhir akhiri akhirnya
|
||||||
|
aku akulah amat amatlah anda andalah antar antara antaranya apa apaan apabila
|
||||||
|
apakah apalagi apatah artinya asal asalkan atas atau ataukah ataupun awal
|
||||||
|
awalnya
|
||||||
|
|
||||||
|
bagai bagaikan bagaimana bagaimanakah bagaimanapun bagi bagian bahkan bahwa
|
||||||
|
bahwasanya baik bakal bakalan balik banyak bapak baru bawah beberapa begini
|
||||||
|
beginian beginikah beginilah begitu begitukah begitulah begitupun bekerja
|
||||||
|
belakang belakangan belum belumlah benar benarkah benarlah berada berakhir
|
||||||
|
berakhirlah berakhirnya berapa berapakah berapalah berapapun berarti berawal
|
||||||
|
berbagai berdatangan beri berikan berikut berikutnya berjumlah berkali-kali
|
||||||
|
berkata berkehendak berkeinginan berkenaan berlainan berlalu berlangsung
|
||||||
|
berlebihan bermacam bermacam-macam bermaksud bermula bersama bersama-sama
|
||||||
|
bersiap bersiap-siap bertanya bertanya-tanya berturut berturut-turut bertutur
|
||||||
|
berujar berupa besar betul betulkah biasa biasanya bila bilakah bisa bisakah
|
||||||
|
boleh bolehkah bolehlah buat bukan bukankah bukanlah bukannya bulan bung
|
||||||
|
|
||||||
|
cara caranya cukup cukupkah cukuplah cuma
|
||||||
|
|
||||||
|
dahulu dalam dan dapat dari daripada datang dekat demi demikian demikianlah
|
||||||
|
dengan depan di dia diakhiri diakhirinya dialah diantara diantaranya diberi
|
||||||
|
diberikan diberikannya dibuat dibuatnya didapat didatangkan digunakan
|
||||||
|
diibaratkan diibaratkannya diingat diingatkan diinginkan dijawab dijelaskan
|
||||||
|
dijelaskannya dikarenakan dikatakan dikatakannya dikerjakan diketahui
|
||||||
|
diketahuinya dikira dilakukan dilalui dilihat dimaksud dimaksudkan
|
||||||
|
dimaksudkannya dimaksudnya diminta dimintai dimisalkan dimulai dimulailah
|
||||||
|
dimulainya dimungkinkan dini dipastikan diperbuat diperbuatnya dipergunakan
|
||||||
|
diperkirakan diperlihatkan diperlukan diperlukannya dipersoalkan dipertanyakan
|
||||||
|
dipunyai diri dirinya disampaikan disebut disebutkan disebutkannya disini
|
||||||
|
disinilah ditambahkan ditandaskan ditanya ditanyai ditanyakan ditegaskan
|
||||||
|
ditujukan ditunjuk ditunjuki ditunjukkan ditunjukkannya ditunjuknya dituturkan
|
||||||
|
dituturkannya diucapkan diucapkannya diungkapkan dong dua dulu
|
||||||
|
|
||||||
|
empat enggak enggaknya entah entahlah
|
||||||
|
|
||||||
|
guna gunakan
|
||||||
|
|
||||||
|
hal hampir hanya hanyalah hari harus haruslah harusnya hendak hendaklah
|
||||||
|
hendaknya hingga
|
||||||
|
|
||||||
|
ia ialah ibarat ibaratkan ibaratnya ibu ikut ingat ingat-ingat ingin inginkah
|
||||||
|
inginkan ini inikah inilah itu itukah itulah
|
||||||
|
|
||||||
|
jadi jadilah jadinya jangan jangankan janganlah jauh jawab jawaban jawabnya
|
||||||
|
jelas jelaskan jelaslah jelasnya jika jikalau juga jumlah jumlahnya justru
|
||||||
|
|
||||||
|
kala kalau kalaulah kalaupun kalian kami kamilah kamu kamulah kan kapan
|
||||||
|
kapankah kapanpun karena karenanya kasus kata katakan katakanlah katanya ke
|
||||||
|
keadaan kebetulan kecil kedua keduanya keinginan kelamaan kelihatan
|
||||||
|
kelihatannya kelima keluar kembali kemudian kemungkinan kemungkinannya kenapa
|
||||||
|
kepada kepadanya kesampaian keseluruhan keseluruhannya keterlaluan ketika
|
||||||
|
khususnya kini kinilah kira kira-kira kiranya kita kitalah kok kurang
|
||||||
|
|
||||||
|
lagi lagian lah lain lainnya lalu lama lamanya lanjut lanjutnya lebih lewat
|
||||||
|
lima luar
|
||||||
|
|
||||||
|
macam maka makanya makin malah malahan mampu mampukah mana manakala manalagi
|
||||||
|
masa masalah masalahnya masih masihkah masing masing-masing mau maupun
|
||||||
|
melainkan melakukan melalui melihat melihatnya memang memastikan memberi
|
||||||
|
memberikan membuat memerlukan memihak meminta memintakan memisalkan memperbuat
|
||||||
|
mempergunakan memperkirakan memperlihatkan mempersiapkan mempersoalkan
|
||||||
|
mempertanyakan mempunyai memulai memungkinkan menaiki menambahkan menandaskan
|
||||||
|
menanti menanti-nanti menantikan menanya menanyai menanyakan mendapat
|
||||||
|
mendapatkan mendatang mendatangi mendatangkan menegaskan mengakhiri mengapa
|
||||||
|
mengatakan mengatakannya mengenai mengerjakan mengetahui menggunakan
|
||||||
|
menghendaki mengibaratkan mengibaratkannya mengingat mengingatkan menginginkan
|
||||||
|
mengira mengucapkan mengucapkannya mengungkapkan menjadi menjawab menjelaskan
|
||||||
|
menuju menunjuk menunjuki menunjukkan menunjuknya menurut menuturkan
|
||||||
|
menyampaikan menyangkut menyatakan menyebutkan menyeluruh menyiapkan merasa
|
||||||
|
mereka merekalah merupakan meski meskipun meyakini meyakinkan minta mirip
|
||||||
|
misal misalkan misalnya mula mulai mulailah mulanya mungkin mungkinkah
|
||||||
|
|
||||||
|
nah naik namun nanti nantinya nyaris nyatanya
|
||||||
|
|
||||||
|
oleh olehnya
|
||||||
|
|
||||||
|
pada padahal padanya pak paling panjang pantas para pasti pastilah penting
|
||||||
|
pentingnya per percuma perlu perlukah perlunya pernah persoalan pertama
|
||||||
|
pertama-tama pertanyaan pertanyakan pihak pihaknya pukul pula pun punya
|
||||||
|
|
||||||
|
rasa rasanya rata rupanya
|
||||||
|
|
||||||
|
saat saatnya saja sajalah saling sama sama-sama sambil sampai sampai-sampai
|
||||||
|
sampaikan sana sangat sangatlah satu saya sayalah se sebab sebabnya sebagai
|
||||||
|
sebagaimana sebagainya sebagian sebaik sebaik-baiknya sebaiknya sebaliknya
|
||||||
|
sebanyak sebegini sebegitu sebelum sebelumnya sebenarnya seberapa sebesar
|
||||||
|
sebetulnya sebisanya sebuah sebut sebutlah sebutnya secara secukupnya sedang
|
||||||
|
sedangkan sedemikian sedikit sedikitnya seenaknya segala segalanya segera
|
||||||
|
seharusnya sehingga seingat sejak sejauh sejenak sejumlah sekadar sekadarnya
|
||||||
|
sekali sekali-kali sekalian sekaligus sekalipun sekarang sekarang sekecil
|
||||||
|
seketika sekiranya sekitar sekitarnya sekurang-kurangnya sekurangnya sela
|
||||||
|
selain selaku selalu selama selama-lamanya selamanya selanjutnya seluruh
|
||||||
|
seluruhnya semacam semakin semampu semampunya semasa semasih semata semata-mata
|
||||||
|
semaunya sementara semisal semisalnya sempat semua semuanya semula sendiri
|
||||||
|
sendirian sendirinya seolah seolah-olah seorang sepanjang sepantasnya
|
||||||
|
sepantasnyalah seperlunya seperti sepertinya sepihak sering seringnya serta
|
||||||
|
serupa sesaat sesama sesampai sesegera sesekali seseorang sesuatu sesuatunya
|
||||||
|
sesudah sesudahnya setelah setempat setengah seterusnya setiap setiba setibanya
|
||||||
|
setidak-tidaknya setidaknya setinggi seusai sewaktu siap siapa siapakah
|
||||||
|
siapapun sini sinilah soal soalnya suatu sudah sudahkah sudahlah supaya
|
||||||
|
|
||||||
|
tadi tadinya tahu tahun tak tambah tambahnya tampak tampaknya tandas tandasnya
|
||||||
|
tanpa tanya tanyakan tanyanya tapi tegas tegasnya telah tempat tengah tentang
|
||||||
|
tentu tentulah tentunya tepat terakhir terasa terbanyak terdahulu terdapat
|
||||||
|
terdiri terhadap terhadapnya teringat teringat-ingat terjadi terjadilah
|
||||||
|
terjadinya terkira terlalu terlebih terlihat termasuk ternyata tersampaikan
|
||||||
|
tersebut tersebutlah tertentu tertuju terus terutama tetap tetapi tiap tiba
|
||||||
|
tiba-tiba tidak tidakkah tidaklah tiga tinggi toh tunjuk turut tutur tuturnya
|
||||||
|
|
||||||
|
ucap ucapnya ujar ujarnya umum umumnya ungkap ungkapnya untuk usah usai
|
||||||
|
|
||||||
|
waduh wah wahai waktu waktunya walau walaupun wong
|
||||||
|
|
||||||
|
yaitu yakin yakni yang
|
||||||
|
""".split()
|
||||||
|
)
|
41
spacy/lang/ms/syntax_iterators.py
Normal file
41
spacy/lang/ms/syntax_iterators.py
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
from typing import Union, Iterator, Tuple
|
||||||
|
|
||||||
|
from ...symbols import NOUN, PROPN, PRON
|
||||||
|
from ...errors import Errors
|
||||||
|
from ...tokens import Doc, Span
|
||||||
|
|
||||||
|
|
||||||
|
def noun_chunks(doclike: Union[Doc, Span]) -> Iterator[Tuple[int, int, int]]:
|
||||||
|
"""
|
||||||
|
Detect base noun phrases from a dependency parse. Works on both Doc and Span.
|
||||||
|
"""
|
||||||
|
# fmt: off
|
||||||
|
labels = ["nsubj", "nsubj:pass", "obj", "iobj", "ROOT", "appos", "nmod", "nmod:poss"]
|
||||||
|
# fmt: on
|
||||||
|
doc = doclike.doc # Ensure works on both Doc and Span.
|
||||||
|
if not doc.has_annotation("DEP"):
|
||||||
|
raise ValueError(Errors.E029)
|
||||||
|
np_deps = [doc.vocab.strings[label] for label in labels]
|
||||||
|
conj = doc.vocab.strings.add("conj")
|
||||||
|
np_label = doc.vocab.strings.add("NP")
|
||||||
|
prev_end = -1
|
||||||
|
for i, word in enumerate(doclike):
|
||||||
|
if word.pos not in (NOUN, PROPN, PRON):
|
||||||
|
continue
|
||||||
|
# Prevent nested chunks from being produced
|
||||||
|
if word.left_edge.i <= prev_end:
|
||||||
|
continue
|
||||||
|
if word.dep in np_deps:
|
||||||
|
prev_end = word.right_edge.i
|
||||||
|
yield word.left_edge.i, word.right_edge.i + 1, np_label
|
||||||
|
elif word.dep == conj:
|
||||||
|
head = word.head
|
||||||
|
while head.dep == conj and head.head.i < head.i:
|
||||||
|
head = head.head
|
||||||
|
# If the head is an NP, and we're coordinated to it, we're an NP
|
||||||
|
if head.dep in np_deps:
|
||||||
|
prev_end = word.right_edge.i
|
||||||
|
yield word.left_edge.i, word.right_edge.i + 1, np_label
|
||||||
|
|
||||||
|
|
||||||
|
SYNTAX_ITERATORS = {"noun_chunks": noun_chunks}
|
1533
spacy/lang/ms/tokenizer_exceptions.py
Normal file
1533
spacy/lang/ms/tokenizer_exceptions.py
Normal file
File diff suppressed because it is too large
Load Diff
|
@ -291,6 +291,11 @@ def ml_tokenizer():
|
||||||
return get_lang_class("ml")().tokenizer
|
return get_lang_class("ml")().tokenizer
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="session")
|
||||||
|
def ms_tokenizer():
|
||||||
|
return get_lang_class("ms")().tokenizer
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="session")
|
@pytest.fixture(scope="session")
|
||||||
def nb_tokenizer():
|
def nb_tokenizer():
|
||||||
return get_lang_class("nb")().tokenizer
|
return get_lang_class("nb")().tokenizer
|
||||||
|
|
0
spacy/tests/lang/ms/__init__.py
Normal file
0
spacy/tests/lang/ms/__init__.py
Normal file
8
spacy/tests/lang/ms/test_noun_chunks.py
Normal file
8
spacy/tests/lang/ms/test_noun_chunks.py
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
|
||||||
|
def test_noun_chunks_is_parsed_ms(ms_tokenizer):
|
||||||
|
"""Test that noun_chunks raises Value Error for 'ms' language if Doc is not parsed."""
|
||||||
|
doc = ms_tokenizer("sebelas")
|
||||||
|
with pytest.raises(ValueError):
|
||||||
|
list(doc.noun_chunks)
|
112
spacy/tests/lang/ms/test_prefix_suffix_infix.py
Normal file
112
spacy/tests/lang/ms/test_prefix_suffix_infix.py
Normal file
|
@ -0,0 +1,112 @@
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("text", ["(Ma'arif)"])
|
||||||
|
def test_ms_tokenizer_splits_no_special(id_tokenizer, text):
|
||||||
|
tokens = id_tokenizer(text)
|
||||||
|
assert len(tokens) == 3
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("text", ["Ma'arif"])
|
||||||
|
def test_ms_tokenizer_splits_no_punct(id_tokenizer, text):
|
||||||
|
tokens = id_tokenizer(text)
|
||||||
|
assert len(tokens) == 1
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("text", ["(Ma'arif"])
|
||||||
|
def test_ms_tokenizer_splits_prefix_punct(id_tokenizer, text):
|
||||||
|
tokens = id_tokenizer(text)
|
||||||
|
assert len(tokens) == 2
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("text", ["Ma'arif)"])
|
||||||
|
def test_ms_tokenizer_splits_suffix_punct(id_tokenizer, text):
|
||||||
|
tokens = id_tokenizer(text)
|
||||||
|
assert len(tokens) == 2
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("text", ["(Ma'arif)"])
|
||||||
|
def test_ms_tokenizer_splits_even_wrap(id_tokenizer, text):
|
||||||
|
tokens = id_tokenizer(text)
|
||||||
|
assert len(tokens) == 3
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("text", ["(Ma'arif?)"])
|
||||||
|
def test_tokenizer_splits_uneven_wrap(id_tokenizer, text):
|
||||||
|
tokens = id_tokenizer(text)
|
||||||
|
assert len(tokens) == 4
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("text,length", [("S.Kom.", 1), ("SKom.", 2), ("(S.Kom.", 2)])
|
||||||
|
def test_ms_tokenizer_splits_prefix_interact(id_tokenizer, text, length):
|
||||||
|
tokens = id_tokenizer(text)
|
||||||
|
assert len(tokens) == length
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("text", ["S.Kom.)"])
|
||||||
|
def test_ms_tokenizer_splits_suffix_interact(id_tokenizer, text):
|
||||||
|
tokens = id_tokenizer(text)
|
||||||
|
assert len(tokens) == 2
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("text", ["(S.Kom.)"])
|
||||||
|
def test_ms_tokenizer_splits_even_wrap_interact(id_tokenizer, text):
|
||||||
|
tokens = id_tokenizer(text)
|
||||||
|
assert len(tokens) == 3
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("text", ["(S.Kom.?)"])
|
||||||
|
def test_ms_tokenizer_splits_uneven_wrap_interact(id_tokenizer, text):
|
||||||
|
tokens = id_tokenizer(text)
|
||||||
|
assert len(tokens) == 4
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"text,length",
|
||||||
|
[("kerana", 1), ("Mahathir-Anwar", 3), ("Tun Dr. Ismail-Abdul Rahman", 6)],
|
||||||
|
)
|
||||||
|
def test_my_tokenizer_splits_hyphens(ms_tokenizer, text, length):
|
||||||
|
tokens = ms_tokenizer(text)
|
||||||
|
assert len(tokens) == length
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("text", ["0.1-13.5", "0.0-0.1", "103.27-300"])
|
||||||
|
def test_ms_tokenizer_splits_numeric_range(id_tokenizer, text):
|
||||||
|
tokens = id_tokenizer(text)
|
||||||
|
assert len(tokens) == 3
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("text", ["ini.Sani", "Halo.Malaysia"])
|
||||||
|
def test_ms_tokenizer_splits_period_infix(id_tokenizer, text):
|
||||||
|
tokens = id_tokenizer(text)
|
||||||
|
assert len(tokens) == 3
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("text", ["Halo,Malaysia", "satu,dua"])
|
||||||
|
def test_ms_tokenizer_splits_comma_infix(id_tokenizer, text):
|
||||||
|
tokens = id_tokenizer(text)
|
||||||
|
assert len(tokens) == 3
|
||||||
|
assert tokens[0].text == text.split(",")[0]
|
||||||
|
assert tokens[1].text == ","
|
||||||
|
assert tokens[2].text == text.split(",")[1]
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("text", ["halo...Malaysia", "dia...pergi"])
|
||||||
|
def test_ms_tokenizer_splits_ellipsis_infix(id_tokenizer, text):
|
||||||
|
tokens = id_tokenizer(text)
|
||||||
|
assert len(tokens) == 3
|
||||||
|
|
||||||
|
|
||||||
|
def test_ms_tokenizer_splits_double_hyphen_infix(id_tokenizer):
|
||||||
|
tokens = id_tokenizer("Arsene Wenger--pengurus Arsenal--mengadakan sidang media.")
|
||||||
|
assert len(tokens) == 10
|
||||||
|
assert tokens[0].text == "Arsene"
|
||||||
|
assert tokens[1].text == "Wenger"
|
||||||
|
assert tokens[2].text == "--"
|
||||||
|
assert tokens[3].text == "pengurus"
|
||||||
|
assert tokens[4].text == "Arsenal"
|
||||||
|
assert tokens[5].text == "--"
|
||||||
|
assert tokens[6].text == "mengadakan"
|
||||||
|
assert tokens[7].text == "sidang"
|
||||||
|
assert tokens[8].text == "media"
|
||||||
|
assert tokens[9].text == "."
|
8
spacy/tests/lang/ms/test_text.py
Normal file
8
spacy/tests/lang/ms/test_text.py
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
import pytest
|
||||||
|
from spacy.lang.ms.lex_attrs import like_num
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("word", ["sebelas"])
|
||||||
|
def test_ms_lex_attrs_capitals(word):
|
||||||
|
assert like_num(word)
|
||||||
|
assert like_num(word.upper())
|
Loading…
Reference in New Issue
Block a user