mirror of
https://github.com/explosion/spaCy.git
synced 2024-12-24 17:06:29 +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
|
||||
|
||||
|
||||
@pytest.fixture(scope="session")
|
||||
def ms_tokenizer():
|
||||
return get_lang_class("ms")().tokenizer
|
||||
|
||||
|
||||
@pytest.fixture(scope="session")
|
||||
def 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