npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

mla

v0.0.1

Published

MLA (machine learning algorithms): A collection of classfier and machine learning algorythms with a focus on text and speech.

Downloads

1

Readme

Classifier

Some classifier implemented in JavaScript.

Nearest Neighbour

Finds the nearest neighbour of a vector.

Document clustering

Clusters documents unsupervised by bag of words.

const corpus = [
	'Bei einem Einbruch in ein Fahrradgeschäft haben Unbekannte am frühen Montagmorgen Beute im fünfstelligen Eurobereich gemacht. Den Tätern gelang es, unerkannt zu entkommen. Die Kripo Würzburg hat inzwischen die weiteren Ermittlungen übernommen und nimmt auch Zeugenhinweise entgegen. 	Nach dem derzeitigen Stand der Ermittlungen muss sich der Einbruch im Zeitraum zwischen 05.00 Uhr und 05.30 Uhr ereignet haben. Offenbar schlugen die Täter eine Fensterscheibe ein, um ins Innere des Fahrradgeschäfts in der Straße „Im Seelein“ zu gelangen. Dort entwendeten die Einbrecher mehr als 20 hochwertige Fahrräder. Dem Sachstand nach wurde das Diebesgut in ein Fahrzeug verladen, welches auf einem benachbarten Firmengrundstück bereitgestellt war. Der genaue Beuteschaden ist noch Gegenstand der laufenden Ermittlungen.	Im Zuge der Ermittlungen wurde auch festgestellt, dass vermutlich dieselben Täter auf einem weiteren Firmengelände in der Nähe Diesel aus einem Lkw und einem Minibagger entwendet hatten. Der Beuteschaden in diesem Fall dürfte sich auf über 200 Euro belaufen. Zudem wurde eine Straßenlaterne, die einen Wendehammer in Tatortnähe ausleuchtet, aufgebrochen und ausgeschalten.',
	'Am Montagnachmittag ist es auf der B 27 zu einem schweren Motorradunfall gekommen. Der verletzte Kradfahrer wurde umgehend in eine Klinik gebracht. Der Unfall und der damit verbundene Rückstau führten zu Verkehrsbeeinträchtigungen im Feierabendverkehr stadtauswärts. Mit der Verkehrsunfallaufnahme war die Polizeiinspektion Würzburg-Stadt betraut.	Auf der B 27 war es gegen 15.35 Uhr zu stockendem Verkehr in Richtung Veitshöchheim gekommen. Mehrere Pkw und auch ein Bus mussten verkehrsbedingt bis zum Stillstand abzubremsen, ein aus Würzburg heran nahender Motorradfahrer erkannte die Situation offenbar zu spät. Er versuchte noch zu bremsen und dem auf der rechten Spur stehenden Bus auszuweichen, fuhr aber dennoch mit seiner Maschine auf das linke Heck auf.	Der 26-Jährige stürzte mit dem Krad und zog sich dabei schwere Verletzungen zu. Der Rettungsdienst versorgte den Mann vor Ort, bevor er in eine naheliegende Klinik gebracht wurde. An der Harley Davidson entstand wirtschaftlicher Totalschaden in Höhe von etwa 8.000 Euro. Die Reparaturkosten am Bus werden sich auf etwa 3.000 Euro belaufen.	Zur Versorgung des Verletzten und Aufnahme des Verkehrsunfalls musste die B 27 in Fahrtrichtung Veitshöchheim kurzzeitig komplett und anschließend bis 16.30 Uhr einspurig gesperrt bleiben. Die Beamten der Polizeiinspektion Würzburg-Stadt waren gemeinsam mit den Einsatzkräften der Berufsfeuerwehr Würzburg im Einsatz.',
	'Ein 76-Jähriger hat am Dienstag seine Lebensgefährtin davor bewahrt, auf einen Enkeltrickbetrüger herein zu fallen. Auch bei weiteren Betrugsversuchen im Raum Schweinfurt und Würzburg in den vergangenen Tagen kam es zu keiner Geldübergabe. Die Unterfränkische Polizei rät weiterhin zu Vorsicht bei falschen Verwandten am Telefon, die hohe Bargeldsummen fordern.	Der Unbekannte hatte am Dienstag gegen 13.30 Uhr bei der Seniorin angerufen und sich als deren Enkel ausgegeben. Der Mann gab im Gespräch an, er hätte einen Unfall gehabt und benötige nun dringend Bargeld. Die 78-Jährige begab sich sogleich zur Bank, um einige tausend Euro ihrer Ersparnisse abzuheben. Bei einem erneutem Telefonat mit dem angeblichen Enkel wenig später schaltet sich dann der zwei Jahre jüngere Lebensgefährte der Rentnerin ein und durchschaute schließlich den Betrug. Somit ging der Täter leer aus und die beiden Senioren meldeten den Fall bei der Schweinfurter Kripo.	Die Kripo Schweinfurt führt nun Ermittlungen in diesem und in einigen weiteren Versuchsfällen, die bekannt geworden waren. Auch in Würzburg kam es zu Anrufen von angeblichen Verwandten mit Geldforderungen. Dies zeigt, dass die Täter weiterhin aktiv sind und gerade ältere Menschen weiter wachsam bleiben sollten. Die Unterfränkische Polizei bittet daher insbesondere die Angehörigen von Senioren, den älteren Damen und Herren immer wieder von der Masche der Betrüger zu erzählen und sie so zu sensibilisieren.',
	'Zu einem tödlichen Motorradunfall ist es am Mittwochnachmittag auf der B27 zwischen Untererthal und Hammelburg gekommen. Der 56-jährige Motorradfahrer kollidierte aus bislang ungeklärter Ursache in einer Rechtskurve mit einem Traktor und verstarb noch an der Unfallstelle. Auf Anordnung der Staatsanwaltschaft wurde ein Sachverständiger hinzugezogen.	Dem derzeitigen Ermittlungsstand nach befuhr der Kradfahrer aus dem Landkreis Bad Kissingen gegen 15:30 Uhr die B27 von Untererthal in Richtung Hammelburg. Im Bereich einer Rechtskurve kam er mit seinem Motorrad aus bislang ungeklärter Ursache zu weit nach links und kollidierte mit dem linken Vorderrad eines entgegenkommenden Traktors. Trotz des schnellen Eintreffens von Rettungsdienst und Notarzt konnte vor Ort nur noch der Tod des Mannes festgestellt werden. Durch den Unfall fing der Traktor Feuer und musste von der Feuerwehr gelöscht werden. Die Insassen des Traktors erlitten einen Schock und wurden von Notfallseelsorgern betreut. An dem zur Hälfte ausgebrannten Traktor entstand vermutlich wirtschaftlicher Totalschaden.	Für die Dauer der Unfallaufnahme durch die Polizeiinspektion Hammelburg musste die Bundesstraße für mehrere Stunden gesperrt werden. Die regionalen Feuerwehren unterstützten die Verkehrsmaßnahmen der Polizei. Auf Anordnung der Staatsanwaltschaft wurde ein Sachverständiger hinzugezogen. Seine Aufgabe ist es nun zusammen mit den Beamten der Hammelburger Polizei den Unfallhergang genau zu rekonstruieren.',
	'Nachdem sich ein 23-Jähriger am Donnerstagmittag im Miltenberger Landratsamt gegenüber Mitarbeitern äußerst aggressiv zeigte, alarmierten diese die Polizei. Als er dann auch die Ordnungshüter bedrohte, wurde er in Gewahrsam genommen und letztlich in ein Bezirkskrankenhaus eingewiesen.	Gegen 12.30 Uhr riefen Behördenmitarbeiter des Landratsamtes die Polizei zu Hilfe. Ein 23-jährger Asylbewerber hatte in einem Büro randaliert und die Anwesenden bedroht. Eine Streife der Miltenberger Polizei wurde bei ihrem Eintreffen von dem jungen Mann bereits mit erhobener Faust empfangen, woraufhin ihm seine Gewahrsamnahme angedroht wurde. Im Zuge dieser wehrte sich der 23-Jährige heftig. Er schlug um sich, trat und bespuckte in der Wache einen Ordnungshüter und setzte zu einem Kopfstoß an. Der Beamte erlitt Verletzungen an der Hand und blieb dienstfähig.	Gegen den Beschuldigten wird jetzt u.a. wegen Widerstands gegen Vollstreckungsbeamte, Körperverletzung, Bedrohung und Beleidigung strafrechtlich ermittelt. Aufgrund seines offensichtlich psychisch belasteten Zustandes brachte ihn eine Streife nach seiner ärztlichen Versorgung in ein Bezirkskrankenhaus.',
	'Im Laufe des vergangenen Wochenendes versuchte ein Unbekannter in ein Bürogebäude einzusteigen. Der Täter scheiterte jedoch mit seinem Vorhaben und flüchtete ohne Tatbeute. Die Ermittlungen führt die Kriminalpolizei Würzburg.	Im Zeitraum von Freitag, 13:00 Uhr, bis Montag, 07:15 Uhr, versuchte ein Unbekannter über eine rückwärtige Tür in ein Bürogebäude in der Zeller Straße einzudringen. Der Täter scheiterte jedoch mit seinem Vorhaben und flüchtete in unbekannte Richtung. Der entstandene Sachschaden beläuft sich auf etwa 500 Euro.',
	'Offenbar in der Nacht zum Dienstag haben Unbekannte im Stadtgebiet Hösbach mehrere BMW aufgebrochen. Die Täter richteten hohe Schäden an und erbeuteten in erster Linie Lenkräder und fest eingebaute Navigationsgeräte. Die Kripo Aschaffenburg hat inzwischen die weiteren Ermittlungen übernommen und nimmt auch Zeugenhinweise entgegen.	Nach den bisherigen Erkenntnissen wurden insgesamt sechs Pkw des Herstellers BMW aufgebrochen, die in der Beethovenstraße, Behringer Straße, Afferbachstraße, Talstraße und Schubertstraße abgestellt waren. Es ist davon auszugehen, dass alle Pkw-Aufbrüche im Zusammenhang stehen. Zum Gesamtschaden, den die Täter bei ihrem Beutezug anrichteten, liegen aktuell noch keine gesicherten Erkenntnisse vor.',
	'In der Nacht zum Sonntag ist es in der Würzburger Straße zu einer tätlichen Auseinandersetzung zwischen mehreren Personen gekommen. Drei Beteiligte erlitten teilweise nicht unerhebliche Verletzungen und kamen ins Krankenhaus. Ein 19-Jähriger versuchte Polizeibeamte zu verletzen und bedrohte sie, woraufhin er in Gewahrsam genommen wurde.	Gegen 01.20 Uhr waren Zeugen in der Würzburger Straße, etwa auf Höhe der Spessartstraße, auf die tätliche Auseinandersetzung aufmerksam geworden. Sie alarmierten die Polizei und hielten einen der Beteiligten fest. Vor Ort trafen die Beamten letztlich zwei 19-Jährige und einen 27-Jährigen an, die offensichtlich an der Auseinandersetzung beteiligt waren.	Alle drei waren verletzt und wurden vom Rettungsdienst ins Krankenhaus eingeliefert. Einer wies Schnittwunden auf. Wie diese entstanden sind ist derzeit noch unklar. Eine Glasflasche könnte dabei eine Rolle gespielt haben. Die anderen Beteiligten waren flüchtig und konnten im Zuge der Fahndung nicht mehr angetroffen werden. Gegen alle drei wurden Strafverfahren wegen des Verdachts von Körperverletzungsdelikten eingeleitet. Nachdem sie alkoholisiert waren, mussten sie sich auf Anordnung der Staatsanwaltschaft eine Blutentnahme gefallen lassen.	Den 19-Jährigen erwartet ebenso ein Strafverfahren wegen des Verdachts der Bedrohung und des Widerstands gegen Vollstreckungsbeamte. Er hatte sich erst im Klinikum aggressiv verhalten und dann Einsatzkräfte der Polizei bedroht, beleidigt und versucht sie mit Kopfstößen zu verletzen. Die Nacht endete für ihn in einer Haftzelle.',
	'In der Nacht zum Mittwoch sind Unbekannte in die Räumlichkeiten eines Autohauses eingebrochen. Im Inneren flexten die Täter einen Tresorschrank auf. Ob daraus etwas entwendet wurde, ist noch Gegenstand der laufenden Ermittlungen, die von der Kriminalpolizei Würzburg geführt werden.	Nach den bisherigen Erkenntnissen muss sich der Einbruch in der Nürnberger Straße im Zeitraum zwischen Dienstagabend, 18.00 Uhr, und Mittwochmorgen, 06.15 Uhr, ereignet haben. Die Täter drangen gewaltsam durch eine Hintertür in die Lagerräume des Autohauses ein, von wo aus sie in den Verkaufsbereich gelangten. Dort machten sie sich unter anderem an dem mannshohen Tresor zu schaffen.	Ob Gegenstände bzw. Bargeld aus dem Tresor entwendet wurden, ist derzeit noch unklar. Bislang steht lediglich fest, dass aus einer Kasse etwa 100 Euro fehlen. Von den Tätern fehlt bislang noch jede Spur.',
	'Mit ihrem Vorhaben in ein Einfamilienhaus einzusteigen sind Einbrecher zwischen Dienstag und Mittwoch gescheitert. Sie richteten an der Terrassentüre Sachschaden in Höhe von mehreren hundert Euro an.	Zwischen Dienstagnachmittag, 16.30 Uhr, und Mittwochvormittag, 10.30 Uhr, gelangten die Täter auf das Grundstück in der Spessartstraße. In der Folge versuchten sie mehrfach die Terrassentüre aufzuhebeln. Diese hielt Stand und die Unbekannten gelangten nicht in den Wohnraum. Der angerichtete Schaden beläuft sich auf rund 1.000 Euro.',
	'Unbekannte Täter haben zwischen Sonntagmittag und Mittwochmorgen zwei Fahrzeuge vom Gelände eines Autohauses gestohlen. Zudem entwendeten sie Fahrzeugkennzeichen. Die Kriminalpolizei Würzburg ermittelt und bittet Zeugen um Hinweise.	Nach dem derzeitigen Stand der Ermittlungen gelang es den Tätern im Zeitraum zwischen Sonntag, 13:00 Uhr, und Mittwoch, 08:00 Uhr, einen schwarzen sowie einen weißen Subaru Levorg vom Gelände eines Autohändlers in der Nürnberger Straße zu entwenden. Bei beiden Fahrzeugen handelt es sich um Neuwagen. Von drei ebenfalls auf dem Parkplatz der Firma abgestellten Fahrzeugen fehlen die Kennzeichen. Da die gestohlenen Fahrzeuge nicht zugelassen sind, ist es möglich, dass die Diebe die entwendeten Nummernschilder an den Subarus angebracht und das Gelände so verlassen haben. Die entwendeten Nummernschilder tragen die Kennzeichen WÜ-YL602, WÜ-YL207 und TBB-MB24. Der Wert der gestohlenen Fahrzeuge beläuft sich auf über 50.000 Euro.',
	'Am Montagvormittag haben drei Männer versucht den Hintereingang zu einer Gaststätte aufzuhebeln. Die im Haus wohnende Wirtin konnte die Tatverdächtigen durch lautes Rufen in die Flucht schlagen. Auf der A 3 endete die Flucht mit der Festnahme durch mehrere Streifen der Unterfränkischen Polizei.	Mit der im Haus lebenden Wirtin hatten die Tatverdächtigen wohl nicht gerechnet, als sie gegen 09:00 Uhr versuchten die Hintertür zur Gaststätte aufzubrechen. Die durch die Geräusche aufmerksam gewordene Wirtin schlug durch lautes Rufen die Verdächtigen in die Flucht. Eine sofort eingeleitete Fahndung der Unterfränkischen Polizei führte auf der A 3 zur Festnahme der drei Männer. Zuvor versuchten sie mit einem Mercedes über die Autobahn in Richtung Frankfurt zu flüchten. Mehrere Streifen der Polizeiinspektion Aschaffenburg, der Verkehrspolizei Aschaffenburg-Hösbach und des Einsatzzuges Aschaffenburg konnten das Fahrzeug stoppen und die Männer vorläufig festnehmen. Bei einer anschließend in Frankfurt durchgeführten Wohnungsdurchsuchung stellten die Beamten mutmaßliches Diebesgut sicher.	Die Nacht verbrachten die Männer im Alter von 35, 28 und 25 Jahren aus Wiesbaden und Frankfurt in getrennten Hafträumen der Aschaffenburger Polizei. Noch am gleichen Tag übernahm die Aschaffenburger Kripo die weiteren Ermittlungen in Abstimmung mit der Staatsanwaltschaft. Auf Antrag der Staatsanwaltschaft erließ der Ermittlungsrichter am Dienstag Haftbefehl gegen den 25-Jährigen wegen des Verdachts des versuchten Diebstahls im besonders schweren Fall. Im Anschluss erfolgte die Überstellung in eine Justizvollzugsanstalt, seine beiden Begleiter wurden wieder entlassen.',
	'Ein 20-Jähriger hat gegenüber einer Streifenbesatzung angegeben, am frühen Donnerstagmorgen von Unbekannten geschlagen und bestohlen worden zu sein. Die Ermittlungen gestalten sich derzeit noch schwierig, da der junge Mann erheblich unter Alkoholeinfluss stand. Aus diesem Grund hofft die Kripo Würzburg nun auch auf Zeugenhinweise.	Nach den bisherigen Erkenntnissen soll sich die Tat gegen 03.15 Uhr in der Augustinerstraße ereignet haben. Dort sei der 20-Jährige aus dem Landkreis Schweinfurt eigenen Angaben zufolge mit drei bis vier Personen in Streit geraten. Er sei anschließend in Richtung Wirsbergstraße davongelaufen und dabei gestürzt. Daraufhin sollen die Unbekannten auf den jungen Mann eingeschlagen und ihm dabei unter anderem das Handy weggenommen haben. Der 20-Jährige stand zur Tatzeit erheblich unter Alkoholeinwirkung. Eine Täterbeschreibung konnte er nicht abgeben.',
	'Einen Unfall hat am Freitagmorgen ein 28-Jähriger gegenüber seinem Chef und später gegenüber der Polizei versucht als Raubüberfall zu verkaufen. Die Spurenauswertung der Beamten der Miltenberger Polizei ergab jedoch etwas anderes. Die erdrückende Beweislast führte dazu, dass der 28-Jährige zugab, selber einen Unfall verursacht und alles vorgetäuscht zu haben.	Anfänglich telefonisch, später auch persönlich, berichtete der 28-Jährige aus dem Landkreis Miltenberg seinem Chef, dass er gegen 05:45 Uhr von drei maskierten Tätern überfallen worden ist. Durch seine Gegenwehr ließen die Angreifer angeblich von ihm ab und schlugen stattdessen die Heckscheibe des Firmen-Transporters ein. Ein Arbeitskollege informierte unverzüglich die Polizei, welche eine groß angelegte Fahndung einleitete. Den Beamten der Miltenberger Polizei kamen jedoch schnell Zweifel an der Räubergeschichte. Trotz erdrückender Beweislast beharrte der Mann anfänglich auf seine Version. Erst als sich ein Puzzlestück zum nächsten fügte, gab er zu, beim Rückwärtsfahren gegen einen Baum gefahren zu sein. Bei seiner unüberlegten Handlung bedachte er wohl nicht, dass er zum einen eine Straftat durch das Vortäuschen einer Straftat begangen hat und zum anderen einen großen Polizeieinsatz mit mehreren beteiligten Fahrzeugen ausgelöst hatte. Neben mehreren Streifen aus Miltenberg und der umliegenden Dienststellen, waren auch Fahrzeuge aus Hessen und Baden-Württemberg im Einsatz. Die Kosten für den Einsatz, die unter Umständen dem Mann in Rechnung gestellt werden, dürften die Höhe des Unfallschadens um ein Vielfaches übersteigen. Die weiteren Ermittlungen führt die Miltenberger Polizei.'
];

/**
 * These are words that should be ignored
 */
const stopwords = [
	'einem',
	'in',
	'ein',
	'zu',
	'der',
	'die',
	'das',
	'dem',
	'den',
	'des',
	'an'
];

const dimensions = 255 //dimensions of bag of words
const clusterer = new DocumentClustering(corpus, dimensions, stopwords);

const k = 3; //sort into three clusters
clusterer.cluster(k, tmpCenters).then(cluster => {
	console.log(cluster); => [['Text...', 'Another similar text...'],['Text...', 'Another similar text...'],['Text...', 'Another similar text...']]
});